【问题标题】:How to use Rails' DateTime class to add minutes and seconds如何使用 Rails 的 DateTime 类添加分钟和秒
【发布时间】:2014-08-07 07:42:21
【问题描述】:

我有一个名为 @start_time@end_time 的变量,它是 Rails 中的 DateTime 对象:

@start_time = params[:start_time]
@end_time = @start_time + 30.minutes

在我的控制器中出现错误:

undefined method '+' for nil:NilClass

我读到“Time manipulation in ruby”说我可以将30.minutes 添加到 DateTime 类对象中。

我的@start_time 由用户在名为“新”的视图中设置。我还确认@start_time 具有正确的值并将它们传递给控制器​​。

我的问题是增加 30 分钟。

<div class="form-group">
      <%= f.label 'Lesson Start' %>
      <%= f.datetime_select :start_time, class: "form-control", ampm: true %>
</div>

当我调试传入的 POST 信息时,它给了我这个:

(byebug) params                                                                                                                                                           
{"utf8"=>"✓", "authenticity_token"=>"3ZUkfyga9SxuZqSWo8RWAIcRPHvYisQUxapgXt4Zx8E=", "lesson"=>{"user_id"=>"1", "student_id"=>"1", "start_time(1i)"=>"2014", "start_time(2i
)"=>"8", "start_time(3i)"=>"7", "start_time(4i)"=>"10", "start_time(5i)"=>"10"}, "lesson_length"=>"45", "commit"=>"Schedule Lesson", "action"=>"create", "controller"=>"le
ssons"}  

我在控制器中尝试了这样的参数:

def create
    @lesson = Lesson.new(lesson_params)
    @current_date = params[:date] || Date.today
    @start_time = params[:start_time]
    @end_time = @start_time + 30.minutes
end

def lesson_params
    params.require(:lesson).permit!
end

【问题讨论】:

  • 您在哪里定义了@start_time?它以nil 的形式出现。
  • @Pavan 对于这个例子,让我们说它是“现在”。我将编辑我的示例,向您展示它是由用户设置的。
  • 我想你是对的,我的问题不仅仅是增加时间。例如,我在它前面添加了@start_time = DateTime.now 行。有效。虽然,我的页面显示它正在传递值。
  • 是的!这就是我的意思。应该为@start_time 定义一些值,然后只有这个@end_time = @start_time + 30.minutes 会执行。

标签: datetime ruby-on-rails-4


【解决方案1】:

您没有将表单数据分配给实例变量。

在您的新方法中,您需要明确地这样做

def create
  @start_time = params[:start_time]
  ...
end

【讨论】:

  • 哦,哈哈。那么这很简单。由于命名约定,我认为它会进入它。感谢您的帮助!
  • 没关系,这些是日/月/年的细分... start_time 应该还可以。
  • 你能检查params[:start_time] 吗? def new; p '*'*80; p params[:start_time] ; p '*'*80 ... 这应该会在您的服务器中打印开始时间,很容易发现,因为它将被一排 80 颗星包围。
  • 啊,哇,我是个白痴!当然,表单数据返回到createupdate,而不是new
  • 您不需要将参数添加在一起。将 'pry' gem 添加到您的项目中进行开发和测试,然后在 def create 之后插入新行 binding.pry 以开发模式运行,当控制台停止在 pry 时,键入 params 以查看参数是。然后输入exit 继续工作。
猜你喜欢
  • 1970-01-01
  • 2022-01-07
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 2021-05-20
相关资源
最近更新 更多