को देखते हुएअरेल, कैसे
class Category < ActiveRecord::Base
has_many :products, :order => 'name ASC'
end
शामिल होने के लिए रेल का उपयोग करते हुए 3 ढेर, मैं सभी श्रेणियों का उत्पाद 'है' के लिए कैसे क्वेरी कर सकते हैं?
को देखते हुएअरेल, कैसे
class Category < ActiveRecord::Base
has_many :products, :order => 'name ASC'
end
शामिल होने के लिए रेल का उपयोग करते हुए 3 ढेर, मैं सभी श्रेणियों का उत्पाद 'है' के लिए कैसे क्वेरी कर सकते हैं?
Category.joins(:products).select("distinct categories.*").all
अरेल (नहीं ActiveRecord) में हम क्या करेंगे निम्नलिखित:
p = Arel::Table.new :products # Base Rel-var
c = Arel::Table.new :categories # Base Rel-var
predicate = p[:category_id].eq(c[:id]) # for equality predicate
p.join(c) # Natural join
.on(predicate) # Equi-Join
.group(p[:category_id]) # Grouping expression to get distinct categories
.project(c[:id]) # Project the distinct category IDs of the derived set.
जब आप कहते हैं "एआरएल में (ActiveRecord नहीं)," आपका क्या मतलब है? हम इसे 'ActiveRecord :: Base' से प्राप्त कक्षा में नहीं कर सकते हैं? यह भ्रामक है। –
आप रेल में एरल का उपयोग कर सकते हैं। यह निश्चित रूप से शामिल है। –
इन सभी उदाहरणों में मैं वास्तविक रिकॉर्ड प्राप्त करने के लिए रेलवे में वापस एआरएलएल क्वेरी को अंतिम चरण में नहीं देखता हूं। पी के साथ अब क्या करना है? आप निश्चित रूप से to_sql पर कॉल कर सकते हैं लेकिन इसे ActiveRecord :: रिलेशन में कैसे बदलना है जो रिकॉर्ड लोड करेगा? – bradgonesurfing
एक और, सरल, दृष्टिकोण का उपयोग करने के लिए है ActiveRecord क्वेरी इंटरफ़ेस के join
सशर्त बयान के लिए अरेल साथ संयोजन के रूप में:
joins(:user)
.where(User.arel_table[:name].matches("%#{query}%"))
sqlite3 में निम्नलिखित एसक्यूएल उत्पन्न करता है
और postgres में निम्नलिखित एसक्यूएल (iLike नोटिस):
"SELECT \"patients\".* FROM \"patients\" INNER JOIN \"users\" ON \"users\".\"id\" = \"patients\".\"user_id\" WHERE (\"users\".\"name\" ILIKE '%query%')"
यह आपको सादगी के साथ शामिल होने के लिए अनुमति देता है, लेकिन अभी भी अपने आरडीबीएमएस को अरेल मिलान की अमूर्त मिलता है।
यह काम करता है, अच्छा धन्यवाद। – Jan
क्या आपको एआरएल प्रश्नों के साथ क्या संभव है पर एक अच्छा संदर्भ पता है? – Jan
मैं अपने ज्ञान को गुगलिंग से लेता हूं, रेल-एलिट ब्लॉग पढ़ता हूं। महत्वपूर्ण बात: ActiveRecord शुद्ध एरल से बहुत अलग है। – gertas