0

Rails に次のモデルがあるとします。

class User < ActiveRecord::Base
  has_many :aliases
  has_many :comments, :as => :commentable
end

class Alias < ActiveRecord::Base
  belongs_to :user
  has_many   :comments, :as => :commentable
end

class Comment < ActiveRecord::Base
  belongs_to :commentable, :polymorphic => true
end

1 人のユーザーとそのすべてのエイリアスの下にあるすべてのコメントを取得するにはどうすればよいでしょうか?

ありがとうございました。

4

1 に答える 1

1

私はこのパターンにかなり慣れています。ユーザーを取得するためのクエリを除いて、3 つのクエリです。コメント可能なユーザーとコメント可能なエイリアスの基準を OR することで、2 つに減らすことができます。そのために squeel gemを使用します。

実際には、ユーザーではなく常にエイリアスにマッピングし、ユーザーが必ずシングルトン エイリアスを持つようにすることを検討してください。これにより、特殊なケースの処理が取り除かれ、全体的に物事が簡単になります。

user = User.first # For example
aliases = user.aliases # Add .to_a if desired
comments = user.comments.to_a + Comment.where(commentable_type: Alias.name).
  where(commentable_id: aliases.map(&:id)).to_a
于 2013-06-29T15:47:45.640 に答える