7

私は次の範囲を持っています:

scope :user_reviews, lambda { |user| where(:user_id => user) }

これをコントローラーに適用します。

def show
  @review = @reviewable.reviews.user_reviews(current_user).first || Review.new
end

これfirstは、現在のユーザーの唯一無二のレビューを検索するように制限することです。今、私は新しいスコープを書き込もうとしています。これは、スコープをでuser_reviewチェーンする多くの方法を試しましたが、何が得られませんでした。このようなもの:user_reviewsfirst

scope :user_reviews, lambda { |user| where(:user_id => user) }
scope :user_review, lambda { |user| user_reviews(user).first }

上記user_reviewが間違っていることはわかっていますが、私がやろうとしていることを皆さんに見せようとしています.

これはどう書けばいいのでしょうか?

ありがとう。

4

4 に答える 4

15

@Victor、元のアイデアに固執してください。を使用scope :user_reviews, lambda { |user| where(:user_id => user) }して呼び出しますuser_reviews.first。それは何も悪いことではありません。

単一のオブジェクトを返すスコープを定義しないでください。スコープは連鎖可能である必要があります。

于 2012-10-29T20:04:59.227 に答える
0
      scope :user_reviews, ->(user) { where(user_id: :user) }
于 2013-12-16T07:10:01.330 に答える
0

私もこれを使用しました:

  def self.user_review(user)
    self.user_reviews(user).first
  end
于 2012-10-31T16:01:48.440 に答える