【发布时间】:2014-02-03 07:01:34
【问题描述】:
我将一个日期时间列(是的,我将其命名为“日期时间”......也许这太令人困惑了)分成两个虚拟属性,date_field 和time_field。
然后使用这个SO answer 我在before_save 回调中重新组合两者。
但是,无论我是否填写了date_field 或time_field,现在验证总是 失败并显示“不能为空白”
这是我的模型:
class SomeModel < ActiveRecord::Base
validates :date_field, :time_field, presence: true
before_save :convert_to_datetime
def date_field
datetime.strftime("%d/%m/%Y") if datetime.present?
end
def time_field
datetime.strftime("%I:%M%p") if datetime.present?
end
def date_field=(date)
@date_field = Date.parse(date).strftime("%Y-%m-%d")
end
def time_field=(time)
@time_field = Time.parse(time).strftime("%H:%M:%S")
end
def convert_to_datetime
self.datetime = DateTime.parse("#{@date_field} #{@time_field}")
end
end
编辑:
以下是调查后的一些新信息:
1) 根据 xmpolaris 的评论,我尝试了 @date_field || datetime.present? datetime.strftime("%d/%m/%Y") : nil,但返回 nil
2) 我用 before_validation 替换了 before_save,这给了我一个 500 无效日期错误。
3) 我用 byebug 检查了参数,它们看起来像这样:
(byebug) p params[:date_field]
"2014-02-10"
(byebug) p params[:time_field]
"11:30"
这是 Rails 的正确格式吗?
【问题讨论】:
-
属性读取器 (date_field, time_field) 方法在创建新记录时始终返回 nil。这就是它失败的原因。如果它的值可用,则必须返回虚拟属性,否则尝试从 datetime 属性中读取。例如@date_field ||日期时间。现在? datetime.strftime("%d/%m/%Y") : 无
-
您的评论对我来说很有意义......但即使在实施您的建议之后,问题仍然存在,正如我所描述的那样。
标签: ruby-on-rails ruby