我有以下模型设置:
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
和favoritable_type`字段。
我最终想做的是检查User
是否已将照片标记为收藏。
我能够毫无问题地创建数据库记录...这是检查该用户是否已经收到了我遇到问题的照片(或其他数据类型)。
我显然可以使用某种原始SQL查询来获取它,但似乎必须采用更“标准”的方式来实现它。
我正在运行Rails 3.0.3。
答案 0 :(得分:2)
您可以在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
我没有测试过它,但我认为它应该可行。