所以我有一个每周日历 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/