আপনি কীভাবে রেলস 5 অ্যাক্টিভেকর্ডে একটি or
কোয়েরি করবেন? এছাড়া, এটিও শৃঙ্খল করা সম্ভব সঙ্গে ActiveRecord ক্যোয়ারীগুলি?or
where
আপনি কীভাবে রেলস 5 অ্যাক্টিভেকর্ডে একটি or
কোয়েরি করবেন? এছাড়া, এটিও শৃঙ্খল করা সম্ভব সঙ্গে ActiveRecord ক্যোয়ারীগুলি?or
where
উত্তর:
or
ক্লোয়ারের সাথে where
ক্লজটির সাথে ধারা অবধি চেইন করার ক্ষমতাটিও রেল 5 এActiveRecord
উপলব্ধ । দেখুন সংশ্লিষ্ট আলোচনা ও পুল অনুরোধ ।
সুতরাং, আপনি রেল 5 এ নিম্নলিখিত জিনিসগুলি করতে সক্ষম হবেন :
1 বা 2 post
দিয়ে একটি পেতে id
:
Post.where('id = 1').or(Post.where('id = 2'))
আরও কয়েকটি উদাহরণ:
(এন্ড এন্ড বি) || সি:
Post.where(a).where(b).or(Post.where(c))
(এ || বি) ও& সি:
Post.where(a).or(Post.where(b)).where(c)
Post.where(a).or(Post.where(b)).where(Post.where(c).or(Post.where(d)))
এই (ক || খ) (গ || ঘ) তৈরি করা উচিত &&
ArgumentError: Unsupported argument type: #<MyModel::ActiveRecord_Relation:0x00007f8edbc075a8> (MyModel::ActiveRecord_Relation)
এই OR
কোয়েরিটি ব্যবহার করার জন্য আমাদের 5 রেলের অপেক্ষা করতে হবে না । আমরা এটি দিয়েও ব্যবহার করতে পারি rails 4.2.3
। এখানে একটি ব্যাকপোর্ট আছে ।
আপনাকে ধন্যবাদ এরিক-গুও মণি জন্য যেখানে-অথবা , 'এখন আমরা এই যোগ করতে পারেন OR
মধ্যে কার্যকারিতা >= rails 4.2.3
এই মণি ব্যবহার করে।
আমার একটা করা দরকার ছিল (A && B) || (C && D) || (E && F)
তবে রেলের 5.1.4
বর্তমান অবস্থায় আরেল বা চেইনের সাথে এটি সম্পাদন করা খুব জটিল। তবে আমি এখনও যতটা সম্ভব ক্যোয়ারী তৈরি করতে রেলগুলি ব্যবহার করতে চেয়েছিলাম।
তাই আমি একটি ছোট হ্যাক করেছি:
আমার মডেলটিতে আমি একটি ব্যক্তিগত পদ্ধতি তৈরি করেছি যার নাম রয়েছে sql_where
:
private
def self.sql_where(*args)
sql = self.unscoped.where(*args).to_sql
match = sql.match(/WHERE\s(.*)$/)
"(#{match[1]})"
end
আমার সুযোগের পরে আমি OR টি ধরে রাখার জন্য একটি অ্যারে তৈরি করেছি
scope :whatever, -> {
ors = []
ors << sql_where(A, B)
ors << sql_where(C, D)
ors << sql_where(E, F)
# Now just combine the stumps:
where(ors.join(' OR '))
}
কোনটি প্রত্যাশিত ক্যোয়ারী ফলাফল উত্পাদন করা হবে:
SELECT * FROM `models` WHERE ((A AND B) OR (C AND D) OR (E AND F))
।
এবং এখন আমি এটিকে অন্য কোনও স্কোপ ইত্যাদির সাথে খুব সহজেই কোনও ভুল বা ওআর ছাড়া একত্রিত করতে পারি।
যে সৌন্দর্যটি আমার স্কেল_এই জায়গাতেই স্বাভাবিক লাগে যেখানে ক্লজ-আর্গুমেন্টগুলি
sql_where(name: 'John', role: 'admin')
উত্পন্ন হবে (name = 'John' AND role = 'admin')
।
.merge
&& এর সমতুল্য হিসাবে ব্যবহার করতে পারেন এবং আপনার পেরেনস ক্যাপচার করার জন্য একটি উপযুক্ত গাছ তৈরি করতে পারেন। এরকম কিছু ... (scopeA.merge(scopeB)).or(scopeC.merge(scopeD)).or(scopeE.merge(scopeF))
, ধরে Model.where(...)
5 রেলগুলিতে or
ক্লজ সহ ক্ষমতা রয়েছে where
। উদাহরণ স্বরূপ.
User.where(name: "abc").or(User.where(name: "abcd"))