我有一个“主题”模型,其中包含一个名为“utid”(唯一主题ID)的属性。 创建主题时,我们需要为utid赋值。 此外,一旦给出值,utid应该是唯一的和只读的。
以下是一个例子:
class Topic < ActiveRecord::Base
attr_reader :utid
before_validation :gen_utid, on: :create
validates :utid, presence: true, uniqueness: true
private
def gen_utid
self.utid = RandomToken.genf(32)
end
end
但是在创建新主题时它总是会引发异常:
ActiveRecord::RecordInvalid: Validation failed: Utid can't be blank
似乎无法在gen_utid中分配utid值,但我不知道如何解决它。你能帮我解决一下,还是有其他方法可以达到同样的要求?感谢〜
答案 0 :(得分:1)
我认为Vimsha走在正确的轨道上......
而不是:
attr_reader :utid
试试这个:
attr_readonly :utid
从Rails文档中,“列为readonly的属性将用于创建新记录,但更新操作将忽略这些字段。”