Ruby on rails 如何正确处理嵌套资源/路由?
我正在尝试构建一个Rails应用程序。代码位于上 我正在使用以下嵌套资源:Ruby on rails 如何正确处理嵌套资源/路由?,ruby-on-rails,routes,nested-routes,Ruby On Rails,Routes,Nested Routes,我正在尝试构建一个Rails应用程序。代码位于上 我正在使用以下嵌套资源: resources :users do resources :scaffolds end 但我得到了以下错误: ActionView::Template::Error (undefined method `scaffolds_path' for #<# <Class:0x007f87848019d0>:0x007f8782651948>): 4: 5: <div class="
resources :users do
resources :scaffolds
end
但我得到了以下错误:
ActionView::Template::Error (undefined method `scaffolds_path' for #<# <Class:0x007f87848019d0>:0x007f8782651948>):
4:
5: <div class="row">
6: <div class="span6 offset3">
7: <%= form_for(@scaffold) do |f| %>
8: <%= render 'shared/error_messages', object: f.object %>
9: <%= f.text_field :name, placeholder: "Scaffold name" %>
10: <%= f.text_area :description, placeholder: "Description" %>
app/views/scaffolds/new.html.erb:7:in `_app_views_scaffolds_new_html_erb___1119296061714080468_70109999031900'
检查由此创建的@scaffold
对象显示:
'#<Scaffold id: nil, name: nil, description: nil, tax_id: nil, user_id: 36, created_at: nil, updated_at: nil>'
“#”
转储@scaffold
的方法不会显示任何脚手架路径
或用户脚手架路径
方法,这些方法会提示其他问题
用户模型
有很多:scaffolds
,scaffold模型属于:user
它与表单助手有关。如果您正在使用嵌套资源,并且从不想直接对Scaffold
对象执行控制器操作,那么您需要在表单视图和模型中执行以下操作。比如:
# app/models/user.rb
class User < ActiveRecord::Base
...
accepts_nested_attributes_for :scaffolds
end
这样,当您运行
rake routes
时,您将看到所有标准操作的users\u scaffolds\u path
和scaffolds\u path
。缺少方法的原因是视图中的form\u for
没有意识到我们正在嵌套。这是通过向其提供一个数组来修复的:
form_for([@user, @scaffold])
谢谢你的回答。现在我怀疑我是否应该使用嵌套资源。我计划进行三个层次的嵌套,因为我希望所有三个层次都有一个索引页。根据这一点:我不应该嵌套,但它还说,它将允许我在三个级别上显示索引。这当然是一个复杂的折衷,尤其是在视图级别。好的,我只是重新引入了嵌套资源,因为它们非常适合我的设计。另外,根据我的自动回答,我找到了缺少方法的原因。
<%= form_for(@user) do |f| %>
...
<%= fields_for @user.scaffold do |scaffold_fields| %>
# config/routes.rb
resources :users do
resources :scaffolds
end
resources :scaffolds
form_for([@user, @scaffold])