0

像这样设置我的数据库(“类型”始终是用户,尽管我通过 STI 有不同类型的用户):

class User 
  # fields
  # :id
  # :sender_id, :sender_type
  # :recipient_id, :recipient_type
end

明信片型号:

class Postcard < ActiveRecord::Base
  belongs_to :owner, :class_name => User
  belongs_to :recipient, :class_name => User
end

我想设置这样的用户模型:

class User < ActiveRecord::Base
  has_many :postcards, :as => [:sender or :recipient] # this is not working
end

所以我可以说:

user.postcards

是否可以?

PS:我也试过这条路:

  has_many :postcards, :finder_sql => Proc.new { "SELECT * FROM postcards WHERE postcards.owner_id=#{id} OR postcards.recipient_id=#{id}" }

但发现自己被困在范围上,因为 :finder_sql 重新创建了一个全新的 SQL:

  User.postcards.by_status('new').size
4

1 回答 1

1

正如 joelparkerhenderson 所说,我需要以不同的方式思考我的关联策略。

正如我想要的那样:

user.postcards

我的回答只是在明信片模型中使用范围:

scope :of_user, lambda { |user| where("recipient_id = ? OR owner_id = ?", user.id, user.id) }

所以我可以调用:

Postcard.of_user user

我什至可以将它包装在用户模型中:

def postcards
   Postcard.of_user self
end
于 2012-09-28T08:58:46.353 回答