嵌套资源与过滤器

时间:2013-04-23 05:59:03

标签: ruby-on-rails

这是我的房子模型

has_many :taggings
has_many :tags, through: :taggings

def self.tagged_with(name)
    Tag.find_by_name!(name).houses
 end

end

这是我的房子控制器

    def index
        if params[:tag]
          @houses = House.tagged_with(params[:tag])
    end
end

视图:

- @houses.each do |house|
ect

这很好用...这会过滤掉当前标签的房屋,例如/ house / tag / tagname

但我实现了嵌套资源,所以我需要将视图更改为此。

- @regions.each do |region|
      - region.houses.find_all do |house|

如何在新视图中使用过滤器标签?我想这个

- @regions.each do |region|
      - region.houses.find_tagged_with(params[:tags]) do |house|

但这不起作用......请帮助。

2 个答案:

答案 0 :(得分:1)

为什么不以相反的方式过滤它?也就是说,不是获取区域的所有房屋并按标签过滤它,而是获取标签的所有房屋并按地区过滤:

def index
  @regions = Region.all # or whatever
  @houses = House.tagged_with(params[:tag])

  @regions.each do |region|
    @houses.where(region_id: region.id).each do |house|
      ...
    end
  end
end

答案 1 :(得分:0)

这不起作用becoz tagged_with在类House中定义,并且在实例或任何集合上都不可调用。 region.houses是一个数组(假设区域has_many房屋)所以它不会对它起作用。一种方法是使用ActiveRecord :: Relation

@regions.each do |region|
 - region.houses.where(:name => params[:tag).each do |house|

请参阅Rails指南以了解更多信息......