Rails HABTM协会没有清除使用.clear,想法?

时间:2012-11-18 21:44:38

标签: ruby-on-rails ruby associations has-and-belongs-to-many

高个子。这并不像我认为的那样表现,这意味着我做错了;

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子句来限制删除哪些关联?

谢谢你们。希望这不会让人感到困惑..

1 个答案:

答案 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关联方法应该按预期工作。