如何检查给定@current_user是否已写入“评论”?

时间:2009-04-27 21:32:33

标签: ruby-on-rails

对于我的模型供应商:

:has_many Review

每个用户:

:has_many Review

每篇评论:

:belongs_to Vendor
:belongs_to User

因此。我不是一个用户能够写一个以上的评论,所以我想检查供应商/:vendorId URL这是“显示”操作,并有办法进行“写评论”按钮消失或显示的基础是@current_user是否已经为该特定供应商撰写了评论。

我知道@ vendor.id和@ loggedin_user.id,但不知道如何对两个参数进行查找。

1 个答案:

答案 0 :(得分:4)

有很多方法可以做到这一点。如果您只想查找两个参数,可以执行以下操作:

Review.find(:first, :conditions => {:user_id => @user.id, :vendor_id => @vendor.id})

您还可以使用关联,如下所示:

@current_user.reviews.find(:first, :conditions => {:vendor => @vendor})

named_scope将是另一种方式:

class Review < ActiveRecord::Base
  named_scope :for_vendor, lambda {|vendor| 
    {:conditions => {:vendor => vendor}}
  }
  belongs_to :vendor
  belongs_to :user
end

@current_user.reviews.for_vendor(@vendor).empty?

由于这是一个业务规则,我建议将此逻辑封装在用户或供应商的方法中,例如:

def can_review?(vendor)
  self.reviews.find(:first, :conditions => {:vendor => @vendor}).nil?
end

然后你可以在视图中做到:

<%= review_vendor_button if @current_user.can_review?(@vendor) %>