gpt4 book ai didi

ruby-on-rails - 如何将整数转换为日期数组?

转载 作者:数据小太阳 更新时间:2023-10-29 09:00:32 24 4
gpt4 key购买 nike

如果用户使用 days_challenge: 5 创建挑战& committed: ["mon", "tue", "wed", "thu", "fri"]那么我们如何从 date_started: "2016-04-20" 创建一个日期数组直到挑战的最后一天,使用名为 dates_challenged 的模型方法?

create_table "challenges", force: true do |t|
t.string "action"
t.date "date_started"
t.text "committed", default: "---\n- sun\n- mon\n- tue\n- wed\n- thu\n- fri\n- sat\n"
t.integer "days_challenged"
end

数组看起来像这样:["2016-04-20", "2016-04-21", "2016-04-22", "2016-04-25", "2016-04-26"]

class Challenge < ActiveRecord::Base
serialize :committed, Array

def dates_challenged
# Not sure if a model method is enough or if I'd have to migrate a new column
end

def committed_wdays
committed.map do |day|
Date::ABBR_DAYNAMES.index(day.titleize)
end
end

def days_left_challenged
def days_done_challenged
((date_started.to_date)..Date.yesterday).count do |date|
committed_wdays.include? date.wday
end
end
if self.days_done_challenged >= self.days_challenged
0
else
self.days_challenged - ((date_started.to_date)..Date.yesterday).count do |date|
committed_wdays.include? date.wday
end
end
end
end

澄清一下,我正在尝试制作一个模型方法,这样我就可以做 @challenge.dates_challenged在一个 View 中,然后我可以在其中迭代日期数组。

最佳答案

这就是我想出的 - 仍然存在一些问题 - 我认为如果 committed 为空,它会爆炸,但它简洁明了:

def dates_challenged
date = date_started-1
days_challenge.times.map { date = find_next(date) }
end

private
def find_next(date)
break if committed.include? Date::ABBR_DAYNAMES[date.wday].downcase while date = date.next
date
end

关于ruby-on-rails - 如何将整数转换为日期数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36755716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com