রেলগুলি ক্রিয়াকলাপের দ্বারা তৈরি রেকর্ডটি কীভাবে পাবেন?


উত্তর:


220
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)

পিএস: এই উত্তরটি হরিশ শেঠি উত্তরটি আমার চেয়ে ভাল বলে পরিবর্তিত হয়েছে। আমার উত্তর হিসাবে একটি গ্রহণ করা হয়। সম্প্রদায় সহায়তার জন্য আমি এই উত্তরটি আপডেট করেছি


4
কেউ পোস্ট.হোয়ার করতে পারে (তৈরি_আট: সময়.জোন.নো.বেগিনিং_ফ_ডে..টাইম.জোন.ওন.এইন্ড_ফ_ডে)
রাফায়েল অলিভিয়রা

1
আজ শেষ হওয়ার আগে কিছু তৈরি হয়েছিল কিনা তা দেখার জন্য কোনও তদন্ত করার দরকার নেই (যেহেতু আগামীকাল এখনও ঘটেনি)।
জেকোনরাইলস

4
যদিও 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)। এমনভাবে করার জন্য একটি বিষয় রয়েছে যাতে আপনি সময়কে সামাল দিতে পারেন। উদাহরণস্বরূপ, আপনি যদি পরীক্ষা নিরীক্ষণ করেন তবে আপনি সম্ভবত সময়টি ব্যবহার করবেন এবং তারপরে প্রথম বিকল্পটি কাজ করবে না। আপনি ভবিষ্যতের সম্ভাব্য ব্যর্থতা এড়াতে চান যা সম্ভবত কিছুটা ডিবাগ সময় নেবে।
লুকাসারুদা

121

আমি জানি এই প্রশ্নের একটি স্বীকৃত উত্তর আছে। গৃহীত উত্তরের প্রস্তাবিত সমাধানটি যখন টেবিলের আকার বাড়ায় তখন পারফরম্যান্সের সমস্যার কারণ হতে পারে।

সাধারণত, আপনি যদি 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

1
সূচক সম্পর্কে দুর্দান্ত পয়েন্ট। কেবল scopeএই স্পষ্ট করেই বলতে চেয়েছিলেন যে এই পোস্টের উদাহরণটি কেবলমাত্র 3 টি রেলের জন্য, যেহেতু দেখে মনে হচ্ছে এটি রেল 2 শিরোনামের অধীনে। 2 রেলগুলিতে আপনার named_scopeপরিবর্তে ব্যবহার করা দরকার scope। এছাড়াও, রেল 3 এ, আপনি সমানভাবে একটি শ্রেণিবদ্ধ পদ্ধতি ব্যবহার করতে পারেন def self.today where("created_at >= ?", Time.now.beginning_of_day) end যা সম্ভবত এই ক্ষেত্রে সুযোগ ব্যবহার করার চেয়ে ক্লিনার, কারণ এটি আপনাকে ল্যাম্বডা ছাড়তে দেয়।
evanrmurphy

@ ইভানমার্মফি, এটি লক্ষ করার জন্য ধন্যবাদ আমার নির্দিষ্ট উত্তর আছে।
হরিশ শেট্টি

@ ইভানমার্মফি আপনি কি "মন্তব্য কেবল" রেল 3 "থেকে" "3 টি এবং তারও বেশি" আপনার মন্তব্যটি সংশোধন করতে পারবেন?
কাইচানভং

@ কাইচানভং আমি রেল ৪ এর সাথে পরিচিত নই, তাই আমি বলতে চাই "রেল 3 (এবং এর চেয়ে বড়?)" তবে এসও আমাকে মন্তব্যটি সম্পাদন করতে দেবেন না: - /
ইভানমার্মি

30

মাইএসকিউএল:

Model.all :condition => ["DATE(created_at) = ?", Date.today] # rails 2
Model.where("DATE(created_at) = ?", Date.today) # rails 3

পোস্টগ্রি:

Model.all :condition => ["created_at::date = ?", Date.today] # rails 2
Model.where("created_at::date = ?", Date.today) # rails 3

19

মোহিত জৈনের উত্তর রেলস 3 এর জন্য অভিযোজিত

Model.where "DATE(created_at) = DATE(?)", Time.now

16

রেল 5.1 এ all_dayএখানে সহায়ক সাহায্যকারী রয়েছে ।

Post.where(created_at: Date.today.all_day)

অথবা

Post.where(created_at: Date.parse("YYYY-MM-DD").all_day)


5

model.rb

scope :posted_today, -> { posted_between_period(Time.now.midnight, Time.now.end_of_day) }

posts_controller.rb

Post.posted_today

2
@ পাঠিভ, between_periodআকর্ষণীয় দেখায়। আমি এর জন্য কোনও ডকুমেন্টেশন পাইনি। আপনি কিছু লিঙ্ক দিতে পারেন? রেলগুলি কীভাবে তুলনার জন্য কলামটি চয়ন করে?
হরিশ শেট্টি

1

কোনও কারণে, এই পোস্টে বা স্ট্যাকওভারফ্লোতে থাকা অন্য কোনও সমাধানই আমার পক্ষে কাজ করেনি (রেল ৪.২.৪ এবং রুবি ২.২.৩ পি ১73৩ ব্যবহার করে)। এটিই কেবল আমার ক্যোয়ারী যা আমি আমার পোস্টগ্রিজ ডাটাবেসের সাথে কাজ করতে পারি:

Post.where("created_at >= TIMESTAMP 'now'")

-1

আজ থেকে তৈরি করা রেকর্ডগুলি জিজ্ঞাসা করতে

আরএল দিয়ে স্কোপ ব্যবহার করুন

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))পাশাপাশি উল্লেখ করা উচিত ।
পিআর হোয়াইটহেড

-4

রেলগুলিতে আজ তৈরি করা রেকর্ডগুলি পাওয়ার জন্য, নিম্নলিখিতটি মাইএসকিএল ব্যবহার করে।

@ ইউজারগোয়ালস = গোল.ওহেন ("ইউজারিড =: ইউজারিড এবং তারিখ (তৈরি_আট) =: তারিখ", {ইউজারিড: প্যারাম [: আইডি], তারিখ: তারিখ: আজ od)

আপনি যদি একা শর্তে এটি সম্পাদনা করতে চান তবে এখানে আমি একাধিক শর্ত ব্যবহার করছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.