Rails范围中的第一个或限制

Vic*_*tor 5 ruby-on-rails ruby-on-rails-3

我有以下范围:

scope :user_reviews, lambda { |user| where(:user_id => user) }
Run Code Online (Sandbox Code Playgroud)

我在控制器中应用它:

def show
  @review = @reviewable.reviews.user_reviews(current_user).first || Review.new
end
Run Code Online (Sandbox Code Playgroud)

first是限制搜索当前用户的唯一审查.现在我尝试编写一个新的范围user_review,我尝试了许多方法来链接user_reviews范围first,但却无法得到它.像这样的东西:

scope :user_reviews, lambda { |user| where(:user_id => user) }
scope :user_review, lambda { |user| user_reviews(user).first }
Run Code Online (Sandbox Code Playgroud)

我知道上面user_review的错误,但只是想告诉你们我想做什么.

我应该如何正确地写这个?

谢谢.

Tom*_*m L 10

@Victor,坚持你原来的想法.使用scope :user_reviews, lambda { |user| where(:user_id => user) }和致电user_reviews.first.没有错.

绝对不要定义返回单个对象的范围.范围应该是可链接的.

  • “完全不定义返回单个对象的范围。范围应该是可链接的。_”我完全同意,我想补充一点,以这种方式使用`scope`听起来像是一个概念错误。我认为使用“ has_one / belongs_to”关系将是更好的选择 (2认同)