【发布时间】:2013-03-13 21:22:09
【问题描述】:
我有 3 个具有“1 到 n”关联的模型,像这样
Client --1 到 n--> Category --1 到 n--> Item
在一个页面中,我需要显示项目列表及其类别。此页面需经过 3 级过滤:
- 客户端过滤:我知道客户端 ID(在本例中我将使用 'id=2')
- 类别名称:用户设置的动态过滤器
- 项目名称:用户设置的动态过滤器
我越来越对 ActiveRecord 关联的东西感到困惑
在我的ItemsController#index 中,我尝试了这个:
categories = Client.find(2).categories
.where('name LIKE ?', "%#{params[:filter_categories]}%")
@items = categories.items
.where('name LIKE ?', "%#{params[:filter_items]}%")
第二行引发NoMethodError undefined method 'items' for ActiveRecord::Relation。我知道第一行返回一个 Relation 对象,但我找不到从这里继续并获取链接到此类别列表的项目列表的方法。
我也开始提取第一行返回的类别ID列表,以便在第二行的where子句中使用它们,但是在编写代码时我发现它不优雅,并认为可能有更好的方法去做吧。任何帮助将不胜感激。谢谢
models/client.rb
class Client < ActiveRecord::Base
has_many :categories
has_many :items, through: :categories
...
end
models/category.rb
class Category < ActiveRecord::Base
belongs_to :client
has_many :items
...
end
model/item.rb
class Item < ActiveRecord::Base
belongs_to :category
has_one :client, through: :category
...
end
【问题讨论】:
标签: ruby-on-rails