【问题标题】:Creating a unique Id in rails while iterating over recurring dates在迭代重复日期时在 Rails 中创建唯一 ID
【发布时间】:2021-06-18 09:56:24
【问题描述】:

我正在使用一种方法来创建日期数组,然后使用此方法对其进行迭代以召开会议:

[2021-03-21, 2021-03-22, 2021-03-23].map do |date|
   Meeting.new(id: id, user_id: user_id , name: name, start_time: date, 
   end_time: date, complete: complete, description: description)
 end

然后使用以下方式设置会议:

def set_meeting
  @meeting = Meeting.find(params[:id])
end

我有一个会议完成的布尔参数,所以我需要将每个会议创建为唯一的 id,这样我就可以在日历上将它们视为单独的会议

【问题讨论】:

  • [2021-03-21, 2021-03-22, 2021-03-23] 真的约会 o_O 吗?我不知道 Rails,但对于 Ruby,这些是数字
  • 你是对的。我编辑了这些值以使其更容易快速阅读。我正在使用来自 ice_cube gem 的 IceCube::Schedule。它产生如下数组[2021-03-21 00:00:00 +0000, 2021-03-22 00:00:00 +0000, 2021-03-23 00:00:00 +0000]
  • @Fravadona 的评论基于这样一个事实,即在帖子中您的Array 等同于[1997,1996,1995],因为- 是应用于整数的数学运算。相反,您应该将其更改为 ['2021-03-21', '2021-03-22', '2021-03-23'],因为 rails 会将这些 Strings 转换为 start_timeend_time 的正确数据类型(例如 DateDateTime

标签: ruby-on-rails ruby iteration


【解决方案1】:

这里在初始化会议对象时无需指定 id。 Rails 为您的对象自动生成顺序 ID。初始化对象后,您需要将此对象存储/保存在数据库中。使用 new 您只是在内存中初始化对象,而不是将它们存储在数据库中。一旦您将记录存储在数据库中,那么从参数中获取 id 并在数据库中查找记录将很容易。

meeting = Meeting.new(user_id: user_id , name: name, start_time: date, 
   end_time: date, complete: complete, description: description)
meeting.save

【讨论】:

  • 感谢您的回复。当我不分配 id 时,我收到 ActionController 错误No route matches {:action=>"show", :controller=>"meetings", :id=>nil}, missing required keys: [:id]。我将深入研究我的代码,看看为什么会发生这种情况
  • 是的。这是 rails 框架中的预期行为。当你调用 show action 时,你应该在 params 中提供 id。请参考-guides.rubyonrails.org/routing.html
猜你喜欢
  • 2014-05-19
  • 2012-08-26
  • 2020-11-19
  • 1970-01-01
  • 2020-09-22
  • 2021-11-11
  • 2019-11-01
  • 2017-01-20
  • 1970-01-01
相关资源
最近更新 更多