1

高人。这不是我认为应该的方式,这意味着我做错了;

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对一个属性执行 a 时,我会得到完整的列表,如果我.clear在该完整列表上执行 a ,它会正确地从数据库中删除关联。

当我执行 a 时,.amenities我只会得到正确标记为舒适性分类的那些标签,但是如果我.clear对这些结果执行 a ,它将无法删除它们,而只是.amenities在控制台中再次执行查询,输出为[].

所以这意味着它只是.clear'结果数组..不是我真正想要的关联。

那么问题来了;.clear从 HABTM 关系中建立关联的正确方法是什么,同时给它本质上一个where子句来限制哪些关联被删除?

多谢你们。希望这不会太混乱..

4

1 回答 1

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

于 2012-11-20T01:12:07.537 回答