2个字段,1个模型属性,日期不解析
2 fields, 1 model attribute, date not parsing
我的模型中有 2 个字段与 1 个属性相关联。我将它应用到我的两个属性中:start_at 和 end_at。我正在为 jQuery.
使用 Timepicker 插件
我的回答基于这里:
我的问题是日期解析不正确。
下面是我的代码:
预约模式:
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"}
请帮忙。 :(
问题是 Ruby 需要 %d/%m/%Y 格式的日期,而您以 %m/%d/%Y 格式传递它(注意日期和月份已更改地方)。日期“3/20/2015”无效,因为没有第 20 个月。 :)
您应该使用 strptime 而不是仅使用 Date.parse,它允许您指定要解析的日期格式。
Date.strptime(date, "%m/%d/%Y")
我的模型中有 2 个字段与 1 个属性相关联。我将它应用到我的两个属性中:start_at 和 end_at。我正在为 jQuery.
使用 Timepicker 插件我的回答基于这里:
我的问题是日期解析不正确。
下面是我的代码:
预约模式:
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"}
请帮忙。 :(
问题是 Ruby 需要 %d/%m/%Y 格式的日期,而您以 %m/%d/%Y 格式传递它(注意日期和月份已更改地方)。日期“3/20/2015”无效,因为没有第 20 个月。 :)
您应该使用 strptime 而不是仅使用 Date.parse,它允许您指定要解析的日期格式。
Date.strptime(date, "%m/%d/%Y")