gpt4 book ai didi

ruby-on-rails - 优化触发 I18n.l 日期格式的条件

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

模型 TravelReport 有两个属性:departure_datearrival_date

助手 arrival_and_departure_months(travel_report) 产生以下字符串:

'February - July 2014'
'December 2013 - January 2014'
'March 2014'
''

取决于开始和结束月份是否在同一年。更糟糕的是,两者都可以为 nil,这会导致空字符串。

这是当前的方法:

def arrival_and_departure_months(travel_report)
if travel_report.arrival_date && travel_report.departure_date
output = I18n.l travel_report.arrival_date, :format => '%B'

if travel_report.arrival_date.year != travel_report.departure_date.year
output += I18n.l travel_report.arrival_date, :format => ' %Y'
else
if travel_report.arrival_date.month == travel_report.departure_date.month
return I18n.l(travel_report.departure_date, :format => '%B %Y')
end
end

output + I18n.l(travel_report.departure_date, :format => ' - %B %Y')
else
''
end
end

我们如何简化或优化代码? ifelse 的集合一点也不吸引眼球。

最佳答案

通过使用正则表达式替换不需要的字符串部分,您可以去掉一些 if 条件并获得更清晰的代码:

def arrival_and_departure_months(travel_report)
if travel_report.arrival_date && travel_report.departure_date
output = I18n.l(travel_report.arrival_date, :format => '%B %Y') +
I18n.l(travel_report.departure_date, :format => ' - %B %Y')
output = output.gsub(/([^ ]+ \d{4}) - \1/, '\1')
output.gsub(/([^ ]+) (\d{4}) - ([^ ]+) \2/, '\1 - \3 \2')
else
''
end
end

您可以在此处检查和使用正则表达式:

关于ruby-on-rails - 优化触发 I18n.l 日期格式的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29280733/

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