Hoe krijg ik vandaag een record gemaakt door rails activerecord?

Hoe moet ik de voorwaardelijke verklaring schrijven voor wanneer ik alle records wil krijgen die vandaag zijn gemaakt?


Antwoord 1, autoriteit 100%

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

PS: Dit antwoord is aangepast omdat het antwoord van Harish Shetty beter was dan het mijne. Aangezien mijn antwoord wordt aanvaard. Ik heb dit antwoord bijgewerkt voor ondersteuning door de gemeenschap


Antwoord 2, autoriteit 53%

Ik weet dat deze vraag een geaccepteerd antwoord heeft. De oplossing die in het geaccepteerde antwoord wordt voorgesteld, kan prestatieproblemen veroorzaken wanneer de tabel groter wordt.

Als u zoekopdrachten uitvoert op basis van de kolom created_at, voegt u gewoonlijk een index toe aan de tabel in uw migratiebestand.

add_index :posts, :created_at

Nu, records opzoeken die vandaag zijn gemaakt:

Rails 3/4

Post.where("created_at >= ?", Time.zone.now.beginning_of_day)

Om berichten op te zoeken die op een specifieke dag zijn gemaakt.

Post.where(:created_at => (date.beginning_of_day..date.end_of_day))

——— OF————-

Voeg een statische methode toe aan uw model

class Post < ActiveRecord::Base
  def self.today
    where("created_at >= ?", Time.zone.now.beginning_of_day)
  end
end
Post.today #returns posts today

Rails 2

Post.all(:conditions => ["created_at >= ?", Time.zone.now.beginning_of_day])

——— OF————-

Voeg een named_scope toe aan uw model

class Post < ActiveRecord::Base    
  named_scope :today, lambda { 
    {
      :conditions => ["created_at >= ?", Time.zone.now.beginning_of_day]
    }
  }
end
Post.today #returns posts today

Antwoord 3, autoriteit 13%

MySQL:

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

PostgreSQL:

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

Antwoord 4, autoriteit 12%

Rails 5.1 heeft een all_day-helper die hier handig is.

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

of

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

Antwoord 5, autoriteit 8%

Mohit Jains antwoord aangepast voor Rails3

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

Antwoord 6, autoriteit 4%

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

Dit “namescopes” het attribuut met de table_name.


Antwoord 7, autoriteit 2%

model.rb

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

posts_controller.rb

Post.posted_today

Antwoord 8

Om de een of andere reden werkte geen van de andere oplossingen in dit bericht, noch andere op StackOverflow voor mij (met behulp van Rails 4.2.4 en Ruby 2.2.3p173). Dit is de enige vraag die ik met mijn Postgres-database aan de slag kon:

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

Antwoord 9

Records opvragen die vanaf vandaag zijn gemaakt

Gebruik bereik met arel

class Post < ActiveRecord::Base    
  scope :create_from_today, -> {
    where(arel_table[:created_at].gteq(Time.zone.now.beginning_of_day))
  }
end

Dan kunnen we het gebruiken

today_posts = Post.created_from_today

Antwoord 10

In rails 4.2.3 om de records die vandaag worden gemaakt te krijgen, gebruikt u mysql als volgt.

@usergoals = Goal.where(“userid = :userid and Date(created_at) = :date”, { userid: params[:id], date: Date.today })

hier gebruik ik meerdere voorwaarden als je wilt, je kunt het voor één voorwaarde bewerken.

Other episodes