对于我的模型供应商:
:has_many Review
每个用户:
:has_many Review
每篇评论:
:belongs_to Vendor
:belongs_to User
因此。我不是一个用户能够写一个以上的评论,所以我想检查供应商/:vendorId URL这是“显示”操作,并有办法进行“写评论”按钮消失或显示的基础是@current_user是否已经为该特定供应商撰写了评论。
我知道@ vendor.id和@ loggedin_user.id,但不知道如何对两个参数进行查找。
答案 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) %>