ruby-on-rails - 日期时间更改 ruby

标签 ruby-on-rails ruby time

我有一个事件,想为其开始和结束日期添加 1 天。代码:

params[:event][:start_time] = [:event][:start_time] + 1.day
        params[:event][:end_time] = [:event][:start_time] + 1.day

这应该将开始时间和结束时间相加 1 天,但它不起作用。

错误是:

no implicit conversion of Symbol into Integer

有人可以帮忙吗?

最佳答案

这里有两个错误。第一个,是你错过了 params在表达式的第二部分,因此您将数组的数组分配给有效覆盖 params 的参数.

params[:event][:start_time] = [:event][:start_time] + 1.day

应该是

params[:event][:start_time] = params[:event][:start_time] + 1.day

第二个问题是 params 中存储的值是 String ,而不是日期或整数。因此你需要投值

params[:event][:start_time] = Time.new(params[:event][:start_time]) + 1.day

还有两个额外的潜在问题:(1) 您正在覆盖原始参数,这绝不是一个好的做法 (2) 该值可能是 nil导致您的应用程序崩溃。

event = params[:event].presence || {}
event[:start_time] = Time.parse(event[:start_time]) + 1.day if event[:start_time]
event[:end_time]   = Time.parse(event[:end_time]) + 1.day   if event[:end_time]

现在 event变量保存正确的参数哈希值。

关于ruby-on-rails - 日期时间更改 ruby ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30499361/

相关文章:

ruby-on-rails - Rails Devise gem 是否使用 cookie 进行身份验证?

ruby-on-rails - 使用 Nokogiri 从与 Savon 的 SOAP 调用中读取响应

sql - 是否可以在 Sequel 中批量更新?

css - :eq pseudo selector not working with Selenium WebDriver/Chrome

string - 表示小时的格式字符串为 H :MM in output

ruby-on-rails - 如何使用 Minitest 在没有数据库的情况下测试 Controller ?

ruby-on-rails - rails 记录 |自创建以来的时间

c# - 我正在尝试将字符串 ("08:55 AM") 转换为时间跨度

c++ - 在没有(必要的?)#include 的情况下编译

ruby-on-rails - 使 Redis 服务器在 Digital Ocean 上安全