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.