2013-03-22 84 views
0

我正在尝试找到筛选has_many关联中的对象的最佳解决方案。我有一个设置是通过属性值筛选has_many

class Company < ActiveRecord::Base 
    has_many :products 
end 

class Product < ActiveRecord::Base 
    attr_accessible :title 
    belongs_to :company 
end 

然后在我的CompaniesController#show方法就是我想要做的是过滤产品通过它的标题。

def show 
    @company = Company.find(params[:id]) 
    # Then I just want the @company.products where title = params[:title] 
end 

任何帮助将不胜感激。

+1

“Filterrific”轨道宝石是精确的工具这个。该文档有一个关于构建ActiveRecord作用域以过滤has_many关联属性的页面:http://filterrific.clearcove.ca/pages/active_record_scope_patterns.html#filter_by_existence_has_many – 2013-05-17 21:49:21

回答

0

您的控制器操作从哪里获取产品标题(params [:title])?如果你只是路过它通过表单提交一个搜索词,那么你应该能够运行像....

@products = @company.products.where("title = ?", params[:title]) 

编辑: 存储相关产品在@company变量将会有问题,因为@company将包含一系列相关产品(而不是公司对象),这不仅会限制您可以从show变量中访问有关特定公司的信息,还会变得令人困惑(例如,重新使用名为@company的变量来存储与公司相关联的产品的列表)

+0

这是我的CompanyController中的show method方法。我只想返回@company实例。 – aahrens 2013-03-22 18:52:25

+0

是否有任何理由不能创建单独的实例变量来存储关联的产品?所以你说的是你想在@company存储关联(过滤)的产品? – ply 2013-03-22 19:02:13

+0

确切地说,如果这是可能的,但我想这样做也会实现我想要的。 – aahrens 2013-03-22 19:07:42