Rails 路由到新的关联模型 [英] Rails Routing to New associated model

查看:54
本文介绍了Rails 路由到新的关联模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个应用程序,其中包含访问我的机构的家庭,并且每次有家庭访问时我都会记录.我在家庭索引中选择家庭并打开我索引中访问模型中的访问视图以选择一个家庭并创建一个新的访问我的家庭索引视图中有以下代码:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆