मुझे लगता है कि यह वास्तव में बुनियादी है, लेकिन मैं एसक्यूएल के साथ भयानक तो मैं पता नहीं कैसे यह करने के लिए है हूँ ...रेल 3 HABTM रिकॉर्ड जुड़े मॉडल विशेषता के आधार पर लगता है
मैं दो मॉडलों के बीच एक मानक HABTM रिश्ता है , लैंडयूसे और फोटो। तो मैं एक land_uses_photos तालिका में शामिल होने के लिए है, और एक मॉडल की तरह, मानक मैक्रो है:
Photo
has_and_belongs_to_many :land_uses
भूमि के उपयोग की मेज है: आईडी, और नाम (स्ट्रिंग)।
मैं उन फ़ोटो को ढूंढना चाहता हूं जहां भूमि उपयोग नाम = 'foo', 'bar', या 'baz' है। मैं उसको कैसे करू?
मैं this question को देखा और कोशिश की:
Photo.includes(:land_uses).where('land_use.id'=>[6,7])
... लेकिन यह है कि मुझे दिया:
ActiveRecord::StatementInvalid: No attribute named `id` exists for table `land_use`
कि फर्जी है, यहाँ दोनों भूमि उपयोग के लिए schema.rb और तालिका में शामिल होने के लिए:
create_table "land_uses", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "display_order"
end
create_table "land_uses_photos", :id => false, :force => true do |t|
t.integer "land_use_id"
t.integer "photo_id"
end
तो, मैं इस तरह के खोज कैसे करूं? और इसे दो के बजाय केवल एक प्रश्न बनाने के लिए, मैं केवल "या" स्थिति की बजाय "और" स्थिति के साथ कैसे ढूंढ सकता हूं?
धन्यवाद!
यह किया था। धन्यवाद! – Andrew
क्या आप जानते हैं कि 'जॉइन' और 'शामिल' के बीच क्या अंतर है? – Andrew
जब आप एसोसिएशन डेटा लोड करना चाहते हैं तो 'शामिल' का उपयोग करें। यह तब उपयोगी होता है जब आप एन + 1 समस्या से बचना चाहते हैं। हर जगह 'जॉइन' का प्रयोग करें, क्योंकि यह एक बहुत ही सरल और तेज़ एसक्यूएल उत्पन्न करता है। –