0

我试图在 Rails 3 has-and-belongs-to-many 关联(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'"

对于检索数据,这按预期工作。不幸的是,这个定义不会添加我需要的 favourite_class' 值(在这种情况下是'User')。

有没有办法,也许使用 Arel,在保存记录之前将 favorite_class 字段设置为所需的值?

4

3 回答 3

2

has_many through 关联可能会更好。这是一篇可能会有所帮助的文章。它解释了多态 has_many :through 关系的问题,并提供了一种解决方法。

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

这也可能有帮助:

与 Rails/ActiveRecord 的多态 habtm 关系

于 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 回答