2009-04-27 44 views
0

對於我的模型供應商:如何檢查'Review'是否已由給定的@current_user寫入?

:has_many Review 

而且每個用戶:

:has_many Review 

而且審覈:

:belongs_to Vendor 
:belongs_to User 

所以。我沒有一個用戶能夠編寫多個Review,所以我想對vendor /:vendorId URL這個「顯示」操作進行檢查,並且有一種方法可以讓「Write Review」按鈕消失或出現的基礎是@current_user是否已寫入該特定供應商的評論。

我知道@ vendor.id和@indenin_user.id,但不知道如何查找兩個參數。

回答

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) %> 
+0

,這是不錯的,謝謝! – Angela 2010-01-03 06:34:30

相關問題