আজ আমি তৈরি করা সমস্ত রেকর্ড পেতে চাইলে কীভাবে শর্তযুক্ত বিবৃতি লিখব?
আজ আমি তৈরি করা সমস্ত রেকর্ড পেতে চাইলে কীভাবে শর্তযুক্ত বিবৃতি লিখব?
উত্তর:
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
পিএস: এই উত্তরটি হরিশ শেঠি উত্তরটি আমার চেয়ে ভাল বলে পরিবর্তিত হয়েছে। আমার উত্তর হিসাবে একটি গ্রহণ করা হয়। সম্প্রদায় সহায়তার জন্য আমি এই উত্তরটি আপডেট করেছি
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
খুব চালাক, আমি সমর্থন করি Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
। এমনভাবে করার জন্য একটি বিষয় রয়েছে যাতে আপনি সময়কে সামাল দিতে পারেন। উদাহরণস্বরূপ, আপনি যদি পরীক্ষা নিরীক্ষণ করেন তবে আপনি সম্ভবত সময়টি ব্যবহার করবেন এবং তারপরে প্রথম বিকল্পটি কাজ করবে না। আপনি ভবিষ্যতের সম্ভাব্য ব্যর্থতা এড়াতে চান যা সম্ভবত কিছুটা ডিবাগ সময় নেবে।
আমি জানি এই প্রশ্নের একটি স্বীকৃত উত্তর আছে। গৃহীত উত্তরের প্রস্তাবিত সমাধানটি যখন টেবিলের আকার বাড়ায় তখন পারফরম্যান্সের সমস্যার কারণ হতে পারে।
সাধারণত, আপনি যদি created_at
কলামের উপর ভিত্তি করে অনুসন্ধানগুলি সম্পাদন করেন তবে আপনার মাইগ্রেশন ফাইলের টেবিলে একটি সূচক যুক্ত করুন।
add_index :posts, :created_at
এখন, আজ তৈরি করা রেকর্ডগুলি অনুসন্ধান করতে:
রেলগুলি 3/4
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
নির্দিষ্ট দিনে তৈরি পোস্টগুলি অনুসন্ধান করতে।
Post.where(:created_at => (date.beginning_of_day..date.end_of_day))
--------- বা -------------
আপনার মডেলটিতে একটি স্থিতিশীল পদ্ধতি যুক্ত করুন
class Post < ActiveRecord::Base
def self.today
where("created_at >= ?", Time.zone.now.beginning_of_day)
end
end
Post.today #returns posts today
রেল 2
Post.all(:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day])
--------- বা -------------
আপনার মডেলটিতে একটি নামযুক্ত_স্কোপ যুক্ত করুন
class Post < ActiveRecord::Base
named_scope :today, lambda {
{
:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day]
}
}
end
Post.today #returns posts today
scope
এই স্পষ্ট করেই বলতে চেয়েছিলেন যে এই পোস্টের উদাহরণটি কেবলমাত্র 3 টি রেলের জন্য, যেহেতু দেখে মনে হচ্ছে এটি রেল 2 শিরোনামের অধীনে। 2 রেলগুলিতে আপনার named_scope
পরিবর্তে ব্যবহার করা দরকার scope
। এছাড়াও, রেল 3 এ, আপনি সমানভাবে একটি শ্রেণিবদ্ধ পদ্ধতি ব্যবহার করতে পারেন def self.today where("created_at >= ?", Time.now.beginning_of_day) end
যা সম্ভবত এই ক্ষেত্রে সুযোগ ব্যবহার করার চেয়ে ক্লিনার, কারণ এটি আপনাকে ল্যাম্বডা ছাড়তে দেয়।
মোহিত জৈনের উত্তর রেলস 3 এর জন্য অভিযোজিত
Model.where "DATE(created_at) = DATE(?)", Time.now
রেল 5.1 এ all_day
এখানে সহায়ক সাহায্যকারী রয়েছে ।
Post.where(created_at: Date.today.all_day)
অথবা
Post.where(created_at: Date.parse("YYYY-MM-DD").all_day)
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
এই "নেমস্কোপগুলি" এর সাথে বৈশিষ্ট্যটি table_name
।
model.rb
scope :posted_today, -> { posted_between_period(Time.now.midnight, Time.now.end_of_day) }
posts_controller.rb
Post.posted_today
between_period
আকর্ষণীয় দেখায়। আমি এর জন্য কোনও ডকুমেন্টেশন পাইনি। আপনি কিছু লিঙ্ক দিতে পারেন? রেলগুলি কীভাবে তুলনার জন্য কলামটি চয়ন করে?
আজ থেকে তৈরি করা রেকর্ডগুলি জিজ্ঞাসা করতে
আরএল দিয়ে স্কোপ ব্যবহার করুন
class Post < ActiveRecord::Base
scope :create_from_today, -> {
where(arel_table[:created_at].gteq(Time.zone.now.beginning_of_day))
}
end
তারপরে আমরা এটি ব্যবহার করতে পারি
today_posts = Post.created_from_today
where('created_at >= now()')
ভবিষ্যতে কেবল এমন আইটেমগুলি খুঁজে পাবে যেখানে তৈরি_আট ছিল।
.lteq(Time.zone.now.end_of_day))
পাশাপাশি উল্লেখ করা উচিত ।
রেলগুলিতে আজ তৈরি করা রেকর্ডগুলি পাওয়ার জন্য, নিম্নলিখিতটি মাইএসকিএল ব্যবহার করে।
@ ইউজারগোয়ালস = গোল.ওহেন ("ইউজারিড =: ইউজারিড এবং তারিখ (তৈরি_আট) =: তারিখ", {ইউজারিড: প্যারাম [: আইডি], তারিখ: তারিখ: আজ od)
আপনি যদি একা শর্তে এটি সম্পাদনা করতে চান তবে এখানে আমি একাধিক শর্ত ব্যবহার করছি।