【问题标题】:Rails nested routes not filteringRails嵌套路由不过滤
【发布时间】:2011-08-03 20:54:21
【问题描述】:

我有两个模型:Product 和 ProductType:

产品:

class Product < ActiveRecord::Base
    default_scope :order => 'name'

    has_many :sales

    belongs_to :product_type, :class_name => "ProductType", :foreign_key => "type_id"   
end

产品类型:

class ProductType < ActiveRecord::Base
    default_scope :order => 'name'

    has_many :products
end

在我的 routes.rb 中,我有:

resources :product_types do
    resources :products
end

当我运行 rake 路由时,我看到这个 url 存在:

        product_type_product GET    /product_types/:product_type_id/products/:id(.:format)               {:controller=>"products", :action=>"show"}

我遇到的问题是,当我导航到:http://localhost:3000/postering_locations/48/users 时,它会显示我拥有的具有 id 48 的发布位置的单个用户。问题是它还将所有其他用户显示为好吧。当我将 48 更改为另一个有效的数字时,也会发生同样的事情。我觉得它在部分工作,因为当我将它换成表中不存在的号码时,我收到路由错误。关于如何制作 /postering_locations/48/users 的任何想法实际上向我展示了 48 作为他们的 postering_location id 的用户?

另外,在我的 routes.rb 上,如果我仍然希望人们只能看到 /products/,我应该在哪里将资源 :products 添加到我的 routes.rb 中?

【问题讨论】:

    标签: ruby-on-rails routes nested-routes


    【解决方案1】:

    我想你应该简单地编辑你的控制器的动作:

    @products = ProductType.find(params[:product_type_id]).products
    

    至于你的第二个问题,只需添加:

    resources :products
    

    到你的 routes.rb。在路由中,规则是先匹配先服务。但是由于嵌套和未嵌套的 url 不会相互匹配,所以没关系。

    【讨论】:

    • 嘿,抱歉...我从 rake 路由中添加了错误的行。 :product_type_id 应该按原样引用还是需要在 params[:product_type_id] 中引用?
    • 如果我想添加其他嵌套资源会怎样?假设每个用户我都有一个角色和一个用户所属的位置。角色和位置有很多用户。我以同样的方式添加了嵌套路由。当我将:@users = Location.find(params[:location_id]).users 添加到我的 users_controller 时,当我尝试按位置查找用户时效果很好。我应该如何向控制器添加代码,以便我还可以按角色查找用户?
    • 规则是一次只发布一个问题。而且,有了一个全新的问题,新的问题就清楚了,现在不是这样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2018-12-28
    • 2015-11-22
    相关资源
    最近更新 更多