ruby on rails - how do I check if a 'Review' has already been written by a given @current_user? -


मेरे मॉडल विक्रेता के लिए:

 : has_many समीक्षा  

और प्रत्येक उपयोगकर्ता:

 : has_many समीक्षा  

और प्रत्येक समीक्षा:

 : belong_to विक्रेता: is_to उपयोगकर्ता  

तो मैं एक से अधिक समीक्षा लिखने में सक्षम होने के लिए एक उपयोगकर्ता नहीं हूं, इसलिए मैं विक्रेताओं / vendorId यूआरएल पर एक चेक करना चाहता हूं जो "शो" क्रिया है, और "समीक्षा लिखें" बनाने का एक तरीका है बटन गायब हो जाते हैं या इस पर आधारित दिखाई देते हैं कि क्या @ सर्ट-यूज़र के लिए पहले से ही उस विशिष्ट विक्रेता के लिए एक समीक्षा लिखी गई है।

मुझे पता है @ विक्रेता और @ लॉग इन_यूसर.आईडी, लेकिन पता नहीं कैसे ढूंढें दो मापदंडों पर।

ऐसा करने के कई तरीके हैं यदि आप सिर्फ दो मापदंडों को ढूंढना चाहते हैं, तो आप ऐसा कर सकते हैं:

  समीक्षा करें। खोजें (: पहला,: शर्तें = & gt; {: user_id = & gt; @ user.id,: vendor_id = & Gt; @ vendor.id})  

आप संगठनों का भी उपयोग कर सकते हैं, जैसे निम्नलिखित:

  @ current_user.reviews.find (: पहले,: शर्तें = & gt; {: विक्रेता = & gt; @ वेंडर})  

एक नामित_सस्कोप एक और तरीका होगा:

  वर्ग की समीक्षा करें & lt; ActiveRecord :: बेस नामित_स्स्कोप: for_vendor, lambda {| विक्रेता | {: शर्तें = & gt; {: विक्रेता = & gt; विक्रेता}}} belongs_to: विक्रेता belongs_to: user end @ current_user.reviews.for_vendor (@vendor) .empty?  

चूंकि यह एक व्यावसायिक नियम है, इसलिए मैं इस तर्क को किसी उपयोगकर्ता या विक्रेता पर एक विधि में समझा सकता हूं, जैसे:

  def can_review? (विक्रेता ) Self.reviews.find (: पहला,: शर्तें = & gt; {: विक्रेता = & gt; @ वेंडर})। शून्य? अंत में  

आप देख सकते हैं:

  & lt;% = review_vendor_button अगर @ current_user.can_review? (@ वेंडर)% & gt;  

Comments