高个子。这并不像我认为的那样表现,这意味着我做错了;
class Tag < ActiveRecord::Base
has_and_belongs_to_many :properties
end
class Property < ActiveRecord::Base
has_and_belongs_to_many :tags
def amenities
tags.where(:classification => :amenity)
end
end
所以我有属性和标签。他们与数据透视表有HABTM关系。
当我在属性上执行.tags
时,我会获得完整列表,如果我在该完整列表上执行.clear
,则会正确删除数据库中的关联。
当我执行.amenities
时,我只获得那些标记了适当性分类的标记,但是如果我对这些结果执行.clear
则无法删除它们,而只是执行.amenities
在控制台中再次查询,输出为[]
。
所以这意味着它只是.clear
&#39}结果数组..而不是我真正想要的关联。
那么问题就在于;什么是来自HABTM关系的.clear
关联的正确方法,同时给它一个where
子句来限制删除哪些关联?
谢谢你们。希望这不会让人感到困惑..
答案 0 :(得分:2)
您可以添加另一个条件关联,而不是定义查询标记的方法,例如:
class Property < ActiveRecord::Base
has_and_belongs_to_many :tags
# this will be just like the tags association, except narrow the results
# to only tags with the classification of 'amenity'
has_and_belongs_to_many :amenities,
:class_name => 'Tag',
:conditions => { :classification => 'amenity' }
end
clear
以及任何其他habtm关联方法应该按预期工作。