我的数据库表中有一个duration
列,我想在其中插入一个时间跨度,例如 02:00 或 19:20(小时和分钟),列类型是时间。用户会看到一个包含两个下拉列表的表单,一个用于分钟,一个用于小时:
=f.select :durationhours, options_for_select((0..23).to_a)
=f.select :durationminutes, options_for_select((0..59).to_a)
该表单是使用 form_for 生成的,我的数据库中没有任何 durationminutes 或 durationhours,因此我在模型中使用了 validates_acceptance_of。
attr_accessible :durationhours, :durationminutes #not sure this line is necessary
validates_acceptance_of :durationhours, :durationminutes
提交表单时,我试图将小时和分钟放在一起并将它们保存到数据库中,但这失败了,没有显示任何错误(终端中只提到了回滚)。我想做的是:
@record.duration = params[:record][:durationhours].to_s.rjust(2, "0") + ":" + params[:record][:durationminutes].to_s.rjust(2, "0")
# but I even tried this, and it doesn't work:
@record.duration = "13:30"
如果没有上面我手动设置持续时间的行,则@record.save
可以正常工作。这是执行保存后我遇到的错误@record.errors.inspect
:
#<ActiveModel::Errors:0x10ba5be08 @messages=#<OrderedHash {:durationhours=>["must be accepted"],
:durationminutes=>["must be accepted"]}>, @base=#<Record id: nil, details: "",
happened: "2013-04-11 02:19:10", duration: "2000-01-01 12:12:00", activity_id: 17,
created_at: nil, updated_at: nil, price: nil>>