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

标签 ruby-on-rails-3 date routes

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

相关文章:

angular - 子路由不起作用,应用程序重定向到 404 页面

ruby - 在 Rails 中,如何向 String 类添加一个新方法?

ruby-on-rails-3 - 导轨 : join with multiple conditions

ruby - 无法使用 RVM 安装 ruby​​ 1.9.2

ruby-on-rails - 添加一个包含多个 "Account"的 "Users"

mysql - 什么是日期?一个字符串?或双?

javascript - Bootstrap 日期选择器中禁用 18 岁以下年份的问题

r - 总结时期

linux - Kohana_HTTP_Exception [404] : The requested URL/was not found on this server

c# - 是否可以在 ASP.NET MVC3 中检索某个 Url 字符串的 Controller 实例?