Ruby on 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="

我正在尝试构建一个Rails应用程序。代码位于上

我正在使用以下嵌套资源:

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])