我有以下范围:
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
,我尝试了很多方法来链接first
和user_reviews
作用域,但就是不能得到它。大概是这样的:
scope :user_reviews, lambda { |user| where(:user_id => user) }
scope :user_review, lambda { |user| user_reviews(user).first }
我知道上面的user_review
是错误的,但只是想告诉你们我想做什么。
我该怎么写才好呢?
谢谢.
4条答案
按热度按时间bf1o4zei1#
坚持你最初的想法:
并调用
user_reviews.first
。这没什么不好绝对不要定义返回单个对象的作用域。作用域应该是可链接的。
dohp0rv52#
我也用了这个:
r9f1avp53#
我觉得这个用例很常见。
我们可以通过以下方式解决这个问题:
然后在模型中将
user_review
作为类方法现在你可以调用
user_review
,它会返回一条记录。dgtucam14#