我想獲得過去 10 周的銷售額。我可以用這種方法做到這一點:
def past_10_sales(yw)
past_sales = []
year_week = yw
10.times do
sales = Sales.where(year_week: year_week.previous)
past_sales << sales unless sales.empty?
year_week = year_week.previous
end
past_sales.flatten
end
但現在我在其他地方也需要這種方法,并想把它放在sales.rb模型中,但我不知道最好的做法是什么,或者 Rails 中是否有一些東西可以讓它變得更好?Sales.where在模型中呼叫感覺不對sales.rb...
編輯:
year_week是具有當前年份和日歷周的模型。所以當前 year_week 將是 202244。打電話year_week.previous給我202243。我從一個特定的日歷周獲得所有銷售額。順便說一句,這很好用。
編輯2:我有一個模型sales.rb。在這個模型中,我保存了所有的銷售額。重要的是銷售是在哪個日歷周進行的,確切的日期并不重要,所以它看起來像這樣:
create_table "sales" do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.bigint "year_week_id"
etc...
end
我還有一個模型year_week,它只保存年份和日歷周,id 是這樣的:年周(所以 202244)。有類似的方法def previous回傳前一年的一周。
我現在想要的是過去 10 周的所有銷售額。所以我稱之為:
sales = Sales.where(year_week: year_week.previous)
past_sales << sales unless sales.empty?
year_week = year_week.previous
10 次,因為這樣它在過去 10 周內獲得了所有銷售,但感覺不對,我想知道是否/有什么更好的方法。
uj5u.com熱心網友回復:
如果您真的必須使用 bigint,您可以執行以下操作:
starting_week = Time.current.advance(weeks: -10).strftime("%Y%V").to_i
Sale.where(
year_week: starting_week..
)
這使用 ISO 周。否則使用%Uor %W。請參閱日期時間#strftime。當然,使用date_trunc('week', sales.created_at)或等效的資料庫函式會使該列變得多余,除非該周實際上與其創建的日歷周不同。
uj5u.com熱心網友回復:
你可以通過以下方式做到這一點:
def past_10_sales(yw)
year_week = yw.previous
past_sales = Sales.where(year_week: (year_week-9..year_week.to_a))
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/527868.html
標籤:轨道上的红宝石
