Rails 3 HABTM - объект пересечения доступа - PullRequest
0 голосов
/ 02 февраля 2011

Я пытаюсь аппроксимировать полиморфные отношения в Rails 3 (HABTM).

Таблица пересечений (user_fabilities) имеет следующие поля: user_id, favour_id, favour_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'"

Для получения данных это работает как ожидалось.К сожалению, это определение не добавит нужное мне значение fav_class (в этом случае «User»).

Есть ли способ, возможно, с помощью Arel, установить в поле favour_class желаемое значение дозапись сохранена?

Ответы [ 3 ]

2 голосов
/ 02 февраля 2011

has_many через ассоциацию может работать лучше. Вот статья, которая может помочь. Это объясняет проблему с полиморфным has_many: через отношения и предлагает обходной путь.

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

это тоже может быть полезно:

Полиморфные отношения habtm с Rails / ActiveRecord

0 голосов
/ 20 февраля 2011

У вас есть SQL-инъекция в вашем варианте.Лучше использовать в своей модели UserFavourites следующее:

before_save :set_favourite_type

private 

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

или хотя бы использовать параметризованный запрос вместо # {}

0 голосов
/ 02 февраля 2011

Мне удалось решить проблему с помощью опции: insert_sql (обратите внимание на использование одинарных кавычек):

:insert_sql => 'INSERT INTO user_favorites (user_id, favorite_id, favorite_type) VALUES (#{id}, #{record.id}, "User")'
...