ruby-on-rails Rails范围内的第一个或限制

qltillow  于 2023-10-21  发布在  Ruby
关注(0)|答案(4)|浏览(132)

我有以下范围:

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,我尝试了很多方法来链接firstuser_reviews作用域,但就是不能得到它。大概是这样的:

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

我知道上面的user_review是错误的,但只是想告诉你们我想做什么。
我该怎么写才好呢?
谢谢.

bf1o4zei

bf1o4zei1#

坚持你最初的想法:

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

并调用user_reviews.first。这没什么不好
绝对不要定义返回单个对象的作用域。作用域应该是可链接的。

dohp0rv5

dohp0rv52#

我也用了这个:

def self.user_review(user)
    self.user_reviews(user).first
  end
r9f1avp5

r9f1avp53#

我觉得这个用例很常见。
我们可以通过以下方式解决这个问题:

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

然后在模型中将user_review作为类方法

def self.user_review(user_id)
    user_reviews(user_id).first
end

现在你可以调用user_review,它会返回一条记录。

dgtucam1

dgtucam14#

scope :user_reviews, ->(user) { where(user_id: :user) }

相关问题