Есть много способов сделать это. Если вы просто хотите найти по двум параметрам, вы можете сделать:
Review.find(:first, :conditions => {:user_id => @user.id, :vendor_id => @vendor.id})
Вы также можете использовать ассоциации, например:
@current_user.reviews.find(:first, :conditions => {:vendor => @vendor})
Именованный_обзор был бы другим способом:
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) %>