Rails: Как мне проверить полиморфную ассоциацию? - PullRequest
2 голосов
/ 16 февраля 2011

У меня есть следующие настройки модели:

class Favorite < ActiveRecord::Base
  belongs_to :favoritable, :polymorphic => true
  belongs_to :user
end

class Photo < ActiveRecord::Base
  belongs_to :user
  has_many :favorites, :as => :favoritable
end

class User < ActiveRecord::Base
  has_many :photos
end

И эта модель Favorite имеет поля favoritable_id и favitable_type`.

В конечном итоге я хочу проверить и увидетьесли User уже пометил фотографию как избранное.

Я могу создать запись в базе данных без проблем ... это проверка, чтобы убедиться, что этот пользователь уже добавил в избранное фотографию (или другоетипа данных), с которыми у меня возникают проблемы.

Я, очевидно, мог бы сделать какой-то необработанный запрос SQL, чтобы получить его, но, похоже, должен быть более "стандартный" способ сделать это.

Я использую Rails 3.0.3.

1 Ответ

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

Вы можете добавить две другие ассоциации в модель User и метод, который проверяет, является ли фотография любимой:

has_many :favorites
has_many :favorites_photos, :through => :favorites, :source => :favoritable, :source_type => 'Photo'

def photo_favorite?(photo)
  favorites_photos.exists?(photo.id)
end

или более просто, просто добавив этот метод в модель Photo:

def favorite_for?(user)
  favorites.exists?(:user_id => user.id)
end

Я не проверял это, но я думаю, что это должно работать.

...