0

Rails 3の多対多の関連付け(HABTM)の多態的な関係を概算しようとしています。

交差テーブル(user_favorites)には、user_id、favorite_id、favorite_classのフィールドがあります。

Userクラスでは、関係を定義しています。

  has_and_belongs_to_many :favorite_users, :class_name => "User", :join_table => "user_favorites", :association_foreign_key => "favorite_id", :foreign_key => "user_id", :conditions => "user_favorites.favorite_class='User'"

データを取得する場合、これは期待どおりに機能します。残念ながら、この定義では、必要なfavorite_class'値(この状況では' User')は追加されません。

レコードを保存する前に、おそらくArelを使用して、favorite_classフィールドを目的の値に設定する方法はありますか?

4

3 に答える 3

2

関連付けによるhas_manyの方がうまくいく可能性があります。これが役立つかもしれない記事です。多態的なhas_many:through関係の問題を説明し、回避策を提供します。

http://blog.hasmanythrough.com/2006/4/3/polymorphic-through

これも役立つかもしれません:

Rails/ActiveRecordとの多対多の関係

于 2011-02-01T23:00:10.047 に答える
0

バリアントにSQLインジェクションがあります。次のUserFavouritesモデルでの使用を改善します。

before_save :set_favourite_type

private 

def set_favorite_type
  self[:favorite_type] = self.favoritable.class.to_s
end

または、少なくとも#{}の代わりにパラメータ化されたクエリを使用します

于 2011-02-20T07:49:10.000 に答える
0

:insert_sqlオプションを使用して問題を解決することができました(一重引用符の使用に注意してください):

:insert_sql => 'INSERT INTO user_favorites (user_id, favorite_id, favorite_type) VALUES (#{id}, #{record.id}, "User")'
于 2011-02-02T00:34:25.597 に答える