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 に答える