Rails 路由到新的关联模型 [英] Rails Routing to New associated model
问题描述
我有一个应用程序,其中包含访问我的机构的家庭,并且每次有家庭访问时我都会记录.我在家庭索引中选择家庭并打开我索引中访问模型中的访问视图以选择一个家庭并创建一个新的访问我的家庭索引视图中有以下代码:
I have an App that has Households that visit my agency and I am logging each time a household visits. I select the household in the households index and open the visit view which is in the visits model in my index to select a household and create a new visit I have teh following code on my index view for households:
= link_to 'Visit', new_household_visit_path(household), class: 'btn btn-mini'
Rake Routes 显示:
Rake Routes Shows:
new_household_visit GET /households/:household_id/visits/new(.:format) visits#new
这会将我带到具有以下网址的表单:
This take me to a form with the following url:
http://localhost:3000/households/5/visits/new
我在此视图中设置了一个简单的表单,如下所示:
I Have a simple form set up at this view as so:
= simple_form_for [household, visit], url: new_household_visit_path do |f|
%h2 Household: #{household.name}
现在,当我填写表格并尝试通过提交保存时,我得到:
Now when I fill in the form and try to save with a submit I get:
No route matches [POST] "/households/5/visits/new"
现在我确实注意到在 Rake Routes 中我有一个 GET 但没有一个 POST 但我仍然不确定我的问题是什么?
Now I did notice that in Rake Routes I have a GET but not a POST but I am still not sure what my problem is?
Routes.rb 显示:
Routes.rb shows:
resources :households do
resources :visits
resources :neighbors
end
我将简单的表单调用更改为:
I changed my simple form call to:
= simple_form_for [household, visit], url: household_visits_path do |f|
我正在创建表单,但在保存时出现错误:
I am creating my form but on saving I get the error:
Required parameter missing: household
日志显示:
Started POST "/households/8/visits" for 127.0.0.1 at 2013-06-22 07:58:34 -0400
Processing by VisitsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"HCivpI4SLQTzj2VlwibssNEw/o69jIt4J54/hjVPgJ4=", "visit"=>{"visited_on(1i)"=>"2013", "visited_on(3i)"=>"22", "visited_on(2i)"=>"6", "neighbor_id"=>"46", "starch"=>"Beans", "cereal"=>"", "option1"=>"", "items_received"=>"", "notes"=>""}, "commit"=>"Create Visit", "household_id"=>"8"}
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
(0.2ms) BEGIN
Neighbor Load (0.8ms) SELECT "neighbors".* FROM "neighbors" WHERE "neighbors"."id" = 46 ORDER BY last_name ASC LIMIT 1
(0.2ms) ROLLBACK
Rendered visits/_new.html.haml (129.7ms)
Rendered visits/new.html.haml within layouts/application (136.2ms)
Rendered text template (0.0ms)
Completed 400 Bad Request in 1126ms (Views: 7.7ms | ActiveRecord: 0.0ms)
我相信我已经接近了
推荐答案
假设您使用的是标准路由,例如:
Assuming you're using standard routes such as:
resources :households do
resources :visits
end
然后您想发布到 household_visits_path
而不是 new_household_visit_path
.
Then you want to be posting to household_visits_path
instead of new_household_visit_path
.
如果你运行 rake routes
你可能会得到类似的东西:
If you run rake routes
you'll probably get something similar to this:
household_visits GET /households/:household_id/visits(.:format) visits#index
POST /households/:household_id/visits(.:format) visits#create
new_household_visit GET /households/:household_id/visits/new(.:format) visits#new
edit_household_visit GET /households/:household_id/visits/:id/edit(.:format) visits#edit
household_visit GET /households/:household_id/visits/:id(.:format) visits#show
PUT /households/:household_id/visits/:id(.:format) visits#update
DELETE /households/:household_id/visits/:id(.:format) visits#destroy
您会注意到,唯一接受 POST 请求的是 household_visits
.new_household_visit
仅用于获取表单.
You'll notice that the only one accepting a POST request is household_visits
. new_household_visit
is only used to GET the form.
这篇关于Rails 路由到新的关联模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!