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プロパティに対してを実行すると、完全なリストが取得.clearされ、その完全なリストに対して実行すると、データベースから関連付けが正しく削除されます。

.amenitiesアメニティの分類で正しくフラグが付けられたタグのみを取得しますが、これら.clearの結果に対してを実行すると、それらを削除できず.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 に答える