ruby on rails - ActiveRecord या क्वेरी



ruby-on-rails ruby-on-rails-3 (9)

रेल 3 ActiveRecord में आप या क्वेरी कैसे करते हैं। मेरे पास जो सभी उदाहरण हैं, वे सिर्फ हैं और प्रश्न हैं।

संपादित करें: या रेल 5 के बाद विधि उपलब्ध है। ActiveRecord::QueryMethods देखें


Answer #1

आप इसे ऐसा कर सकते हैं:

Person.where("name = ? OR age = ?", 'Pearl', 24)

या अधिक सुरुचिपूर्ण, rails_or मणि स्थापित करें और इसे पसंद करते हैं:

Person.where(:name => 'Pearl').or(:age => 24)

Answer #2

बस शर्तों में एक या एक जोड़ें

Model.find(:all, :conditions => ["column = ? OR other_column = ?",value, other_value])

Answer #3

यदि आप एक कॉलम के मान पर एक OR ऑपरेटर का उपयोग करना चाहते हैं, तो आप एक सरणी पास कर सकते हैं .where और ActiveRecord IN(value,other_value) उपयोग करेगा:

Model.where(:column => ["value", "other_value"]

आउटपुट:

SELECT `table_name`.* FROM `table_name` WHERE `table_name`.`column` IN ('value', 'other_value')

यह एक OR एक स्तंभ पर समकक्ष प्राप्त करना चाहिए


Answer #4

यदि आप तर्क के रूप में सरणी का उपयोग करना चाहते हैं, तो निम्न कोड रेल 4 में काम करता है:

query = Order.where(uuid: uuids, id: ids)
Order.where(query.where_values.map(&:to_sql).join(" OR "))
#=> Order Load (0.7ms)  SELECT "orders".* FROM "orders" WHERE ("orders"."uuid" IN ('5459eed8350e1b472bfee48375034103', '21313213jkads', '43ujrefdk2384us') OR "orders"."id" IN (2, 3, 4))

अधिक जानकारी: या रेल 4 में तर्क के रूप में सरणी के साथ प्रश्न


Answer #5

रेल / ActiveRecord का एक अद्यतन संस्करण मूल रूप से इस वाक्यविन्यास का समर्थन कर सकता है। यह इसी तरह दिखेगा:

Foo.where(foo: 'bar').or.where(bar: 'bar')

जैसा कि इस पुल अनुरोध में उल्लेख किया गया है https://github.com/rails/rails/pull/9052

अभी के लिए, बस निम्नलिखित कार्यों के साथ चिपके हुए महान:

Foo.where('foo= ? OR bar= ?', 'bar', 'bar')

अद्यतन: https://github.com/rails/rails/pull/16052 के अनुसार or सुविधा रेल 5 में उपलब्ध होगी

अद्यतन: फ़ीचर को रेल 5 शाखा में विलय कर दिया गया है


Answer #6

रेल 3 में, यह होना चाहिए

Model.where("column = ? or other_column = ?", value, other_value)

इसमें कच्चे एसक्यूएल भी शामिल है लेकिन मुझे नहीं लगता कि ActiveRecord करने या ऑपरेशन में कोई तरीका है। आपका सवाल नोब सवाल नहीं है।


Answer #7

रेल ने हाल ही में इसे ActiveRecord में जोड़ा है। यह रेल 5 में रिलीज होने लग रहा है 5. पहले से ही मास्टर के लिए प्रतिबद्ध:

https://github.com/rails/rails/commit/9e42cf019f2417473e7dcbfcb885709fa2709f89

Post.where(column: 'something').or(Post.where(other: 'else'))

# => SELECT * FROM posts WHERE (column = 'something') OR (other = 'else)

Answer #8

ARel प्रयोग करें

t = Post.arel_table

results = Post.where(
  t[:author].eq("Someone").
  or(t[:title].matches("%something%"))
)

परिणामी एसक्यूएल:

ree-1.8.7-2010.02 > puts Post.where(t[:author].eq("Someone").or(t[:title].matches("%something%"))).to_sql
SELECT     "posts".* FROM       "posts"  WHERE     (("posts"."author" = 'Someone' OR "posts"."title" LIKE '%something%'))

Answer #9
Book.where.any_of(Book.where(:author => 'Poe'), Book.where(:author => 'Hemingway')




ruby-on-rails-3