"even-6ren">
gpt4 book ai didi

ruby-on-rails-3 - 带日期的 Rails 路线

转载 作者:行者123 更新时间:2023-12-04 07:02:14 25 4
gpt4 key购买 nike

所以我有一个每周日历 View ,我有一条路线设置为接受/:year/:month/:day 作为开始日期。

  match "events/(:year/:month/:day)" => "events#index", 
:constraints => { :year => /\d{4}/, :month => /\d{2}/, :day => /\d{2}/ },
:as => "events_date"

关于这条路线的使用,我有两个问题。首先,在解析参数时,这就是我在做什么:
unless params[:year].nil? || params[:month].nil? || params[:day].nil?
start_date = Date.new(params[:year].to_i, params[:month].to_i, params[:day].to_i)
end
start_date = start_date.nil? ? Date.today : start_date

这让我觉得非常冗长和丑陋。有没有更好的办法?

当链接到日历中的另一周时(用于每周分页),我是否必须做类似的事情
#assume an date object with the desired start date
link_to events_date_path(date.strftime('%Y'), date.strftime('%m'), date.strftime('%d'))

这似乎也有点冗长和丑陋。在 route 处理日期的最佳方式是什么?

最佳答案

我的建议是不要使用三个单独的变量。这样你就不会在 Controller 中进行大量额外的空检查和健全性检查。你可以把你的比赛变成这样的东西,你的约束仍然完好无损:

match "events/(:date)" => "events#index", 
:constraints => { :date => /\d{4}-\d{2}-\d{2}/ },
:as => "events_date"

因此,您最终会在 Controller 中得到一些更理智的东西:
unless params[:date]
start_date = params[:date].strftime("%Y-%m-%d').to_date # assuming you want a Date
end

我通常会做那些类型的“如果设置了”检查更像这样的东西,因为我发现它更具可读性:
start_date = Date.today unless defined? start_date

你甚至可以把最后两个放在一起:
start_date = defined?(params[:date]) ? params[:date].strftime("%Y-%m-%d').to_date : Date.today

关于ruby-on-rails-3 - 带日期的 Rails 路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10421281/

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