0

class: contentで表されるコンテンツ モデルがあります。ユーザーは、コンテンツの評価、コンテンツレビュー、またはその両方を実行できるようになりました。ユーザーが評価レビュー、または評価とレビューを行ったすべてのコンテンツを検索したいと考えています。レビューテーブルには、コンテンツテーブルとの多対1 の関連付けがあります (つまり、コンテンツは何度もレビューできます)。評価テーブルとコンテンツテーブルの間にも同様の関係があります。

ユーザーが評価したすべてのコンテンツを検索し、ユーザーがレビューしたすべてのコンテンツを検索してから、ユニオンを実行するために、個別のクエリを実行する必要があると考えています。しかし、アクティブなレコード関係を返すユニオンを実行する方法がわかりません。結果をページ分割したいので、関係が必要です。

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

4

2 に答える 2

2

では、まずモデルを設定しましょう。あなたの説明から、次のようなものが必要になると思います。

class Content < ActiveRecord::Base
  has_many :reviews
  has_many :reviewing_users, :through => :reviews, :class_name => "User"

  has_many :ratings
  has_many :rating_users, :through => :ratings, :class_name => "User"
end

class User < ActiveRecord::Base
  has_many :reviews
  has_many :reviewed_contents, :through => :reviews, :class_name => "Content"

  has_many :ratings
  has_many :rated_contents, :through => :ratings, :class_name => "Content"
end

class Review < ActiveRecord::Base
  belongs_to :content
  belongs_to :user
end

class Rating < ActiveRecord::Base
  belongs_to :content
  belongs_to :user
end

次に、特定のユーザーについて、そのユーザーがレビューおよび/または評価したすべてのコンテンツを見つけることができます。

( user.reviewed_contents + user.rated_contents ).uniq
于 2012-06-30T08:11:37.910 に答える
2

(user.reviewed_contents + user.rated_contents).uniqリレーションではなく配列を返すので、注意してください。@postsこれをテストするには、 (paginate 以外の)でクラス メソッドを呼び出します。

ただし、ページネーションを行うことはできます。gem がpaginateメソッドを配列クラスに追加するため@posts.paginate、 を使用するだけです。will_paginate

于 2012-08-10T03:12:47.073 に答える