Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails4:处理数据库和表单之间的日期_Ruby On Rails_Date - Fatal编程技术网

Ruby on rails RubyonRails4:处理数据库和表单之间的日期

Ruby on rails RubyonRails4:处理数据库和表单之间的日期,ruby-on-rails,date,Ruby On Rails,Date,我正在寻找一些关于从表单和数据库来回转换日期的帮助。我一直在使用以下方法,但似乎应该有更好/更简单的方法来管理它 视图中的代码: <%= f.label :issue_date, "Date Issued" %> <%= f.text_field :issue_date, class: 'form-control', :value => @license.issue_date.strftime("%m-%d-%Y") %> 我担心的是,这在很大程度上取决于

我正在寻找一些关于从表单和数据库来回转换日期的帮助。我一直在使用以下方法,但似乎应该有更好/更简单的方法来管理它

视图中的代码:

  <%= f.label :issue_date, "Date Issued" %>
  <%= f.text_field :issue_date, class: 'form-control', :value => @license.issue_date.strftime("%m-%d-%Y") %>

我担心的是,这在很大程度上取决于输入格式是否正确。例如,如果输入4/2/2015而不是4-2-2015,则会破坏代码。我将感谢任何帮助或建议!我已经读了很多关于日期的帖子,但没有具体回答这个问题

不幸的是,至少根据我的经验,在Rails中很难设置具有良好UI的日期输入。如果您愿意在UI上做出一些妥协,最简单的解决方案是使用内置的日期选择帮助器:

这将生成三个select输入,如下所示:

Rails将自动处理将这三个输入的提交转换为数据库中的适当日期的操作。同样,UI不是很好,但它确实解决了日期格式验证问题


稍后,如果您决定改用Javascript日期选择器,请设置JS以确保日期值始终以YYYY-MM-DD格式提交给服务器,这是Rails所期望的。

您可以做几件事:1使用JS进行客户端验证,2使用Rails验证程序进行服务器端验证,3在控制器中设置before_动作中的值格式,以下仅举几个例子。这真的取决于你,但重要的问题是你想允许输入日期的各种格式,还是你想限制它?我想让用户输入日期,因为他们觉得舒服。在某个时候,我也会在字段中添加一个日期选择器。我希望有一个更简单的解决方案,因为这似乎是一个常见的问题。因此,我基本上每次都需要手动格式化,将用户可能输入的任何格式更改为正确的格式,使用-?好的,您可以使用。您可以编写一个case语句,重新格式化边缘案例的日期,即mm/dd/yy将失败,并在将其保存到数据库之前将所有其他内容转换为日期对象。
params[:license][:issue_date] = DateTime.strptime( params[:license][:issue_date], "%m-%d-%Y").strftime("%Y-%m-%d")
params[:license][:expiration_date] = DateTime.strptime( params[:license][:expiration_date], "%m-%d-%Y").strftime("%Y-%m-%d")
<%= f.date_select :issue_date %>