0

这是我的房子模型

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|

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

4

2 回答 2

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
于 2013-04-23T06:41:49.163 回答
0

这将不起作用,因为 tagged_with 是在类 House 中定义的,并且不能在实例或任何集合上调用。region.houses 是一个数组(假设 region has_many 房子),所以它不能工作。一种方法是使用 ActiveRecord::Relation

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

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

于 2013-04-23T06:09:51.627 回答