这是我的房子模型
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|
但这不起作用......请帮助。
答案 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指南以了解更多信息......