0

我有一个“主题”模型,里面有一个名为“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 值,但我不知道如何修复它。你能帮我弄清楚还是有其他方法可以达到同样的要求?谢谢~

4

1 回答 1

1

我认为 Vimsha 走在正确的轨道上......

代替:

attr_reader :utid

尝试这个:

attr_readonly :utid

在 Rails 文档中,“列为只读的属性将用于创建新记录,但更新操作将忽略这些字段。”

见这里:http ://api.rubyonrails.org/classes/ActiveRecord/ReadonlyAttributes/ClassMethods.html#method-i-attr_readonly

于 2013-10-09T15:43:33.277 回答