我有一個名爲「utid」(唯一主題ID)屬性的「Topic」模型。 創建主題時,我們需要爲utid分配一個值。 此外,一旦給定值,utid應該是唯一的並且只讀。如何使用rails模型在after_validation中爲attr_reader屬性指定默認值
下面是一個例子:
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價值,但我不不知道如何解決它。你能幫我弄清楚,還是有其他方法可以達到同樣的要求嗎?謝謝〜
確定'RandomToken.genf(32)'的作品如預期? –
你正在爲utid定義attr_reader,它只生成一個getter(沒有setter)。所以當你做self.utid =''時,它什麼都不做 – usha
@BillyChan是的,我很確定。 –