【问题标题】:How do I modify a datetime hash in Rails?如何在 Rails 中修改日期时间哈希?
【发布时间】:2023-04-11 04:25:01
【问题描述】:

我有一个这样的哈希:

{"utf8"=>"✓",
 "authenticity_token"=>"yYl/Nts0KRktqjR5K7vYXf1jrOyRJmQOtaF7lPMIeZQ=",
 "meeting"=>{"name"=>"Robsbaun",
 "start_at(3i)"=>"4",
 "start_at(2i)"=>"10",
 "start_at(1i)"=>"2013",
 "start_at(4i)"=>"11",
 "start_at(5i)"=>"15",
 "end_at(1i)"=>"2013",
 "end_at(2i)"=>"10",
 "end_at(3i)"=>"4",
 "end_at(4i)"=>"19",
 "end_at(5i)"=>"15",
 "room_id"=>"1",
 "user_id"=>"2"},
 "commit"=>"Submit"}

我想为end_at(2i)start_at(2i)end_at(3i)start_at(3i) 设置相同的值。

如何在 Ruby 2.0 和 Rails 4 中做到这一点?

我已经尝试过类似的方法:

meeting_params[":end_at(3i)"] = meeting_params[":start_at(3i)"]

但它不起作用。

提前致谢。

【问题讨论】:

  • 呃。我强烈建议不要使用"✓" 作为您的标志,无论它是utf8。使用布尔值true/false,或者至少使用 nil/not-nil。你的测试逻辑会更清晰:if hash['utf8'] vs. if hash['utf8'] == "✓",它会使其更兼容各种 ORM、DBM 和数据库模式,它们已经理解 true/false 或 nil/not-nil 映射到标准数据库中的“is”/“is not”条件测试。
  • 我不知道如何改变它...但是谢谢你的提示

标签: ruby-on-rails ruby hashmap


【解决方案1】:

直接更改值应该可以,它只是一个哈希。不过,您的语法不太正确。假设它以params 的形式出现:

params['meeting']['end_at(3i)'] = params['meeting']['start_at(3i)'] 

您正在尝试将符号和字符串组合在一起 - 只使用其中一个即可。

【讨论】:

  • 只是为了完全确定...end_at(3i)start_at(3i) 在您发布的哈希中是相同的,您确定在这些值不同的哈希上尝试过吗?
  • 是的,在我的表单中,我只在 date_select 上显示 start_at。我将日期更改为 12 (start_at(3i)=12),end_at 获取 Time.now,(因此 end_at(3i) 将等于 4)。在我的控制器中,我这样做: params['meeting']['end_at(3i)'] = params['meeting']['start_at(3i)'] 但由于某种原因,end_at 和 start_at 都转到 Time.now,如果我不尝试这样做,控制器工作正常,它用 12 保存 start_at(3i)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
相关资源
最近更新 更多