Rails:如何检查多态关联?

时间:2011-02-16 16:26:58

标签: ruby-on-rails associations polymorphic-associations

我有以下模型设置:

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。

1 个答案:

答案 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

我没有测试过它,但我认为它应该可行。