我有一个Order
模型。
它应该有一个随机生成的key
字段(我需要将它保存到数据库中)。
一旦创建,密钥应该是只读的。
我该怎么做?
PS:
我在 中创建了@key 实例变量after_initialize
,但它不想存储在数据库中。我究竟做错了什么?
我有一个Order
模型。
它应该有一个随机生成的key
字段(我需要将它保存到数据库中)。
一旦创建,密钥应该是只读的。
我该怎么做?
PS:
我在 中创建了@key 实例变量after_initialize
,但它不想存储在数据库中。我究竟做错了什么?
确保您的key
字段是 attr_reader 并且您有一个将关键字段添加到模型数据库表的迁移。
您应该使用before_create
回调来生成密钥。然后覆盖key=
访问器以防止覆盖此密钥:
def key= value
raise "not allowed, you fool!"
end
你可以使用回调和ActiveRecord::Dirty来做你想做的事。
在您的数据库中创建一个列,例如将是一个字符串的键。
然后在你的模型中添加这个。
before_save :set_key_if_needed
def set_key_if_needed
if self.persisted?
self.errors.add(:key, 'key cannot be changed') if self.key.changed?
else
self.key = "Your key randomly generated"
end
end
如果持久化?(如果对象已保存到数据库中)您检查密钥是否已更改,如果是,则阻止验证成功。否则,您只需生成您的密钥。