1
我有以下型号设置轨道4:composed_of映射到JSON店属性
# task.rb
class Task << AR
# everything all task objects have in common
end
# login_request.rb
class Tasks::LoginRequest < Task
store :data, accessors: [:email, :first_name, :last_name, :expires_at]
composed_of :valid_until, class_name: 'DateTime', mapping: %w(expires_at to_s), constructor: Proc.new { |date| (date && date.to_datetime) || DateTime.now }, converter: Proc.new { |value| value.to_s.to_datetime }
end
我用我的形式datetime_select
帮手:
# _form.html.haml
= f.datetime_select :valid_until
这工作得很好,但当我使用提交的表单数据在我的控制器中调用update
时,我收到以下错误消息:
1 error(s) on assignment of multiparameter attributes [error on assignment [2014, 4, 2, 9, 48] to valid_until (can't write unknown attribute 'expires_at')]
所以,我猜测更新的方法试图直接操作attributes
散列,但显然它找不到属性expires_at
,因为它是JSON列data
的简单访问器方法。
我知道我可以简单地将此字段添加到数据库,它可能会工作 - 虽然没有必要然后有一个composed_of
声明。但我宁愿不走这条路,因为不是每个任务都有一个expires_at
列。
我该如何克服这个错误?或者我错过了什么?
感谢您的回复。我有'valid_until'直接作为商店访问者,但是我不能使用'datetime_select'助手对它的魔术仍然工作,因为我得到提到的多参数错误。而且我知道我可以创建一个手动包装器,但我想避免自己编程,因为所有功能基本上都存在 - 但它不能按预期工作。 – Vapire
我明白了。它现在不能这样工作,所以我写了这个版本。 – drKreso
非常感谢! – Vapire