2011-04-06 14 views
5

के बजाय नाम से ढूंढें मैं RoR सीखने की कोशिश कर रहा हूं, अपना पहला ऐप बना रहा हूं, एक बुनियादी सूची एप्लिकेशन। मैंने चारों ओर खोज करने की कोशिश की है लेकिन सही वाक्यविन्यास नहीं मिला, इसलिए मैंने सोचा कि मैं पूछूंगा।रेल 3 - आईडी

मॉडल

class Item < ActiveRecord::Base 
belongs_to :supplier 

class Supplier < ActiveRecord::Base 
has_many :items 

आइटम नियंत्रक

@items = Item.find_all_by_supplier_id '1' 

इस डेटा है कि मैं चाहता हूँ वापस आ जाएगी, लेकिन मैं इनपुट करने के लिए में आपूर्तिकर्ता नाम उम्मीद थी:

यहाँ मेरी सेट हो रहा है नियंत्रक ताकि यदि आईडी मेल नहीं खाती है तो यह अभी भी ठीक से काम करेगी।

आशा है कि पर्याप्त जानकारी है, धन्यवाद!

उत्तर

17

आप अपने विधि बिट को उलटने और कोशिश कर सकते:

@items = Supplier.find_by_name('THE NAME').items 

रेल गतिशील find_by_ * और खोज के लिए find_all_by_ * तरीकों पैदा करता है। सप्लायर_आईडी द्वारा आइटम्स को पुनर्प्राप्त करने के बजाय, मैं अनुशंसा करता हूं कि आप रेलवे को उपरोक्त कोड स्निपेट में सेट किए गए एसोसिएशन के साथ ऐसा करने दें। आंतरिक रूप से, यह अभी भी सप्लायर_आईडी का उपयोग करता है, लेकिन रेल आपके बजाए प्रक्रिया को संभालने में कामयाब रहे हैं।

इस का उल्टा भी हो सकता है, तो आप एक आइटम है और आपूर्तिकर्ता चाहते हैं, तो आप कर सकते हैं:

Item.find(1).supplier 
+0

में संदर्भ है धन्यवाद श्रीमान! उसने जादू की तरह काम किया। – rmp

0
@items = Item.joins(:suplier).where(:suplier => { :name => "Suplier name" }) 
0
Supplier.find_by_colname(params[:name]) 

कहाँ colnameSupplier table column का नाम है, जिसमें हम हमारे पैरामीटर मान की जांच करना चाहते हैं। रेल में हम ऊपर दिखाए गए अनुसार find_by_ के साथ कॉलम नाम जोड़ सकते हैं और रेल आपको यह जादू दिखाएंगे;)। यहां Doc