Ruby on rails RubyonRails——嵌套资源的问题

Ruby on rails RubyonRails——嵌套资源的问题,ruby-on-rails,nested-routes,Ruby On Rails,Nested Routes,我对嵌套资源有问题 2款车型 User => has_many :stuffs Stuff => belongs_to :user routes.rb map.resources :stuffs map.resources :users, :has_many => [:stuffs] 当我调用/users/1/Stuff时,它会向我显示相应用户的内容。但我在调用/users/2/stuff时也得到了这个消息。它应该返回0个“stuff”,但不起作用 MySQL Quer

我对嵌套资源有问题

2款车型

User => has_many :stuffs

Stuff => belongs_to :user
routes.rb

map.resources :stuffs

map.resources :users, :has_many => [:stuffs]
当我调用/users/1/Stuff时,它会向我显示相应用户的内容。但我在调用/users/2/stuff时也得到了这个消息。它应该返回0个“stuff”,但不起作用

MySQL Query from Server
SELECT * FROM `stuffs`
耙道

stuffs GET    /stuffs(.:format)                         {:action=>"index", :controller=>"stuffs"}
                POST   /stuffs(.:format)                         {:action=>"create", :controller=>"stuffs"}
      new_stuff GET    /stuffs/new(.:format)                     {:action=>"new", :controller=>"stuffs"}
     edit_stuff GET    /stuffs/:id/edit(.:format)                {:action=>"edit", :controller=>"stuffs"}
          stuff GET    /stuffs/:id(.:format)                     {:action=>"show", :controller=>"stuffs"}
                PUT    /stuffs/:id(.:format)                     {:action=>"update", :controller=>"stuffs"}
                DELETE /stuffs/:id(.:format)                     {:action=>"destroy", :controller=>"stuffs"}
    user_stuffs GET    /users/:user_id/stuffs(.:format)          {:action=>"index", :controller=>"stuffs"}
                POST   /users/:user_id/stuffs(.:format)          {:action=>"create", :controller=>"stuffs"}
 new_user_stuff GET    /users/:user_id/stuffs/new(.:format)      {:action=>"new", :controller=>"stuffs"}
edit_user_stuff GET    /users/:user_id/stuffs/:id/edit(.:format) {:action=>"edit", :controller=>"stuffs"}
     user_stuff GET    /users/:user_id/stuffs/:id(.:format)      {:action=>"show", :controller=>"stuffs"}
                PUT    /users/:user_id/stuffs/:id(.:format)      {:action=>"update", :controller=>"stuffs"}
                DELETE /users/:user_id/stuffs/:id(.:format)      {:action=>"destroy", :controller=>"stuffs"}
          users GET    /users(.:format)                          {:action=>"index", :controller=>"users"}
                POST   /users(.:format)                          {:action=>"create", :controller=>"users"}
       new_user GET    /users/new(.:format)                      {:action=>"new", :controller=>"users"}
      edit_user GET    /users/:id/edit(.:format)                 {:action=>"edit", :controller=>"users"}
           user GET    /users/:id(.:format)                      {:action=>"show", :controller=>"users"}
                PUT    /users/:id(.:format)                      {:action=>"update", :controller=>"users"}
                DELETE /users/:id(.:format)                      {:action=>"destroy", :controller=>"users"}
           root        /                                         {:action=>"index", :controller=>"users"}
宝石清单

actionmailer (2.3.8)
actionpack (2.3.8)
activerecord (2.3.8)
activeresource (2.3.8)
activesupport (2.3.8)
arel (2.0.6)
authlogic (2.1.6)
builder (2.1.2)
cgi_multipart_eof_fix (2.5.0)
gem_plugin (0.2.3)
i18n (0.5.0)
mongrel (1.1.5 x86-mingw32)
mysql (2.8.1 x86-mingw32)
paperclip (2.3.7)
rack (1.1.0)
rails (2.3.8)
rake (0.8.7)
tzinfo (0.3.23)
对应的用户id没有where子句。但是如何修复它

Rails版本2.3.8

应该这样工作=>2.7嵌套资源
希望有人能在你的Stuff controller的索引方法方面提供帮助,你是如何收集你的资料的?如果使用脚手架来创建控制器,它将默认为

@stuffs = Stuff.all
但应该是类似于

@user = User.find(params[:user_id])
@stuffs = @user.stuffs

或者类似的东西——基本上,你是在收集用户的东西,而不是所有的东西。

在你的Stuffs controller的索引方法中,你是如何收集你的东西的?如果使用脚手架来创建控制器,它将默认为

@stuffs = Stuff.all
但应该是类似于

@user = User.find(params[:user_id])
@stuffs = @user.stuffs

或者类似的东西——基本上,你收集的是用户的东西,而不是所有的东西。

路由本身不会影响模型。但是,由于传入了用户id,您可以执行以下操作:

User.find(params[:user_id]).stuffs

仅管线不会影响模型。但是,由于传入了用户id,您可以执行以下操作:

User.find(params[:user_id]).stuffs
试试这个

map.resources :users do |users|
  users.resources :stuffs
end
试试这个

map.resources :users do |users|
  users.resources :stuffs
end

默认情况下,Rails控制器不会过滤您的结果。如上所述,由于您可能在Stuff控制器中调用Stuff.all,因此它将始终返回所有Stuff对象

我使用继承的资源作为网站的默认行为。它会自动处理这些关系,并允许您在需要不同行为时覆盖这些关系:


默认情况下,Rails控制器不会过滤您的结果。如上所述,由于您可能在Stuff控制器中调用Stuff.all,因此它将始终返回所有Stuff对象

我使用继承的资源作为网站的默认行为。它会自动处理这些关系,并允许您在需要不同行为时覆盖这些关系:


Hm,我可以这样做,但当我在routes.rb中添加:has\u many relationship时,我认为rails承担了这一部分。我还想用你的代码调用/stuffs/,它会抛出一个错误:(如果你想列出/stuffs/上的所有内容和/user/:user_id/stuffs上的用户内容,你必须检查user_id参数。基本上,如果params[:user_id]设置后,使用获取用户内容的代码,否则将获取所有内容。我认为rails会自动处理这一点。如here=>@Nihil如果您按照完整源代码的链接进行操作,您可以看到他在何处加载筛选的集合:嗯,我可以这样做,但我认为rails会承担这一部分,当我在routes.rb.I中添加:has_many relationship时如果你想用你的代码调用/stuffs/,它会抛出一个错误:(如果你想在/stuffs/上列出所有的内容,在/user/:user\u id/stuffs上列出一个用户的内容,你必须检查user\u id参数设置后,使用获取用户内容的代码,否则将获取所有内容。我认为rails会自动处理此问题。如下图=>@Nihil如果您按照完整源代码的链接进行操作,您可以看到他在何处加载筛选的集合:不起作用:(与:在路由中有多个选项存在相同问题。rbso控制器中有问题…检查上述答案不工作:(与:在路由中有多个选项存在相同问题。rbso控制器中有问题…检查上述答案,但它应该工作,这就是问题:(另请参见:2.7嵌套资源否,这只会影响url路由。当您获取对象集合时,您仍然需要自己根据嵌套id对其进行筛选。该指南没有其他要求。嗯,但它应该可以工作,这就是问题所在:(另请参见:2.7 Nested Resources no,这仅影响url路由。当您获取对象集合时,您仍然必须自己根据嵌套id进行筛选。该指南不作其他声明。