2010-10-14 15 views
37

मैं कैसे मैं रेल में कुछ इस तरह कर सकते हैं, एक नियंत्रकरेल - 2 क्षेत्रों के साथ खोजें?

def update 
    @permission = Permission.find_by_user_id(params[:user_id]) 

लेकिन मैं यह भी एक और परम द्वारा प्राप्त करना चाहते में निम्नलिखित project_id

है?

@permission = Permission.find_by_user_id_and_project_id(params[:user_id],params[:user_id]) 

उत्तर

61

हाँ, आप तरीके का एक गुच्छा में पाता कर सकते हैं।

आपका उदाहरण नीचे काम करता है:

@permission = Permission.find_by_user_id_and_project_id(params[:user_id],params[:project_id])

- अपने उदाहरण नोट दो user_ids

रेल में 2.x आप भी स्थिति

@permission = Permission.find(:conditions=>["user_id=? and project_id=?", params[:user_id], params[:project_id]]) 

और रेल में उपयोग कर सकते हैं की थी 3, आप ठंडा हो सकते हैं:

@permission = Permission.where(:user_id=>params[:user_id]).where(:project_id=>params[:project_id]).first 
+0

धन्यवाद, मैं पहले की तरह एक हालांकि ... बहुत साफ क्लीनर। – AnApprentice

+0

आखिरी वाला रेल 3 रास्ता है ... जब तक कोई दायरा नहीं डालता है। – DGM

+1

यहां डीजीएम के साथ सहमत हैं, स्कॉप्स बहुत अच्छे हैं .... अनुमति .for (@user) .for (@project)। सबसे पहले कोड पठनीयता के लिए अच्छा है –

4

इस प्रयास करें:

@permission = Permission.find(:conditions => ['user_id = ? and project_id = ?', params[:user_id], params[:project_id]]) 
4

रेल स्कोप के साथ 3 रास्ता:

scope :by_user_id_and_project_id, lambda {|user_id,project_id| 
    where(:user_id=>user_id).where(:project_id=>project_id]) 
} 

और फिर आप उपयोग कर सकते हैं इसे पसंद:

@permission = Permission.by_user_id_and_project_id(params[:user_id],params[:project_id]) 
40

रेल 4 find_by विधि का परिचय:

Permission.find_by(user_id: params[:user_id], project_id: params[:project_id]) 
+0

क्या यह वाक्यविन्यास एसक्यूएल इंजेक्शन के लिए अतिसंवेदनशील है? – csi

+1

मैं इसे भी जानना चाहता हूं। यह थोड़ा उलझन में है जब पैराम [: विशेषता] का उपयोग करना ठीक है और जब यह नहीं है। – Augusto

+3

यह इंजेक्शन के लिए अतिसंवेदनशील नहीं है - केवल एक बार जब आप एसक्यूएल इंजेक्शन के खतरे में हैं, तब आप एक सबमिट किए गए पैरा को सीधे एक स्ट्रिंग में इंटरपोलेट करते हैं जिसका मतलब किसी क्वेरी में उपयोग किया जाता है - जैसे 'ModelName.where ("विशेषता =' # {पैराम्स [ : विशेषता]} ' ")'। ऐसे मामले हैं जहां आपको एक कस्टम क्वेरी की आवश्यकता है जिसे आप ActiveRecord क्वेरी बिल्डर्स के साथ नहीं बना सकते हैं, लेकिन उन मामलों में आप निम्न वाक्यविन्यास का उपयोग कर सकते हैं: 'ModelName.where ("विशेषता =?", पैराम्स [: विशेषता]) ' –

संबंधित मुद्दे