【问题标题】:2 fields, 1 model attribute, date not parsing2 个字段,1 个模型属性,日期未解析
【发布时间】:2015-03-05 10:35:19
【问题描述】:

我的模型中有 2 个字段与 1 个属性相关联。我在我的两个属性中应用它:start_at 和 end_at。我正在为 jQuery 使用 Timepicker 插件。

我的答案基于这里:https://stackoverflow.com/questions/18461798/rails-4-convert-datetime-into-separate-date-and-time-fields#=

我的问题是日期解析不正确。

以下是我的代码:

约会模式:

before_save :convert_to_datetime
attr_accessor :start_date, :start_time, :end_date, :end_time

def start_date
    start_at.strftime("%d/%m/%Y") if start_at.present?
end 

def start_time
    start_at.strftime("%I:%M%p") if start_at.present?
end

def start_date=(date)
# Change back to datetime friendly format
@start_date = Date.parse(date).strftime("%Y-%m-%d")
end

def start_time=(time)
  # Change back to datetime friendly format
  @start_time = Time.parse(time).strftime("%H:%M:%S")
end

def end_date
    end_at.strftime("%d/%m/%Y") if end_at.present?
end 

def end_time
    end_at.strftime("%I:%M%p") if end_at.present?
end

def end_date=(date)
  # Change back to datetime friendly format
  @end_date = Date.parse(date).strftime("%Y-%m-%d")
end

def end_time=(time)
  # Change back to datetime friendly format
  @end_time = Time.parse(time).strftime("%H:%M:%S")
end

def convert_to_datetime
    self.start_at = DateTime.parse("#{@start_date} #{@start_time}")
    self.end_at = DateTime.parse("#{@end_date} #{@end_time}")
end

强参数:

params.require(:task).permit(:category_id, :subcategory_id, :title, :description, :pay_offer, :pay_type, :county_id, :area_id, appointments_attributes: [:id, :start_date, :start_time, :end_date, :end_time])

如果你想知道,约会是任务模型的一个嵌套属性。

这是错误:

ArgumentError (invalid date):
  app/models/appointment.rb:26:in `parse'
  app/models/appointment.rb:26:in `start_date='
  app/controllers/tasks_controller.rb:9:in `create'

指的是这一行:@start_date = Date.parse(date).strftime("%Y-%m-%d")

日志:

 "appointments_attributes"=>{"0"=>{"start_date"=>"3/20/2015",
 "start_time"=>"12:30 AM",
 "end_date"=>"3/21/2015",
 "end_time"=>"01:30 AM"}}},
 "commit"=>"Create Task"}

请帮忙。 :(

【问题讨论】:

  • 尝试使用DateTime.parse(date).strftime("%Y-%m-%d")
  • tnx 的回复,但它不起作用。
  • 您是否需要顶部的日期require 'date'
  • 不,我会尝试添加然后...
  • 附带问题:在方法名称后面加上= 的语法是什么?

标签: ruby-on-rails datetime ruby-on-rails-4 jquery-ui-timepicker


【解决方案1】:

问题是 Ruby 期望日期为 %d/%m/%Y 格式,而您以 %m/%d/%Y 格式传递它(请注意,日期和月份已更改位置)。日期“2015 年 3 月 20 日”无效,因为没有第 20 个月。 :)

您应该使用 strptime 而不是仅使用 Date.parse,它允许您指定要解析的日期格式。

 Date.strptime(date, "%m/%d/%Y")

【讨论】:

  • 没问题 :) 如果它解决了您的问题,请随意将答案标记为正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 2020-01-26
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多