2009-04-27 2 views
0

내 모델 공급 업체 :주어진 @current_user가 이미 'Review'를 작성했는지 어떻게 확인합니까?

:has_many Review 

그리고 각 사용자 :

:has_many Review 

그리고 각 검토 :

:belongs_to Vendor 
:belongs_to User 

그래서. 나는 하나 이상의 리뷰를 쓸 수있는 사용자가 아니므로, "show"액션 인 vendor/: vendorId URL에 대한 점검을하고 싶다. 그리고 "Write Review" 버튼이 사라지거나 @current_user가 해당 특정 공급 업체에 대한 Review를 이미 작성했는지 여부에 따라 나타납니다.

@ vendor.id 및 @ loggedin_user.id를 알고 있지만 두 매개 변수에서 찾기를 수행하는 방법을 모릅니다.

답변

4

이렇게하는 방법에는 여러 가지가 있습니다. 당신은 단지 두 개의 매개 변수를 찾으려면, 당신은 할 수있다, • named_scope 또 다른 방법이 될 것입니다

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

:

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

당신은 또한 다음과 같은 연관을 사용할 수있다

,536 :이 비즈니스 규칙이기 때문에
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) %> 
+0

, 감사합니다! – Angela

관련 문제