设置rails中属性的默认值

时间:2018-08-08 15:23:12

标签: ruby-on-rails

我需要将属性initial_collection_amount的默认值设置为基于另一个属性amount的计算。 initial_collection_amount为零,直到记录被持久保存,因此after_create触发验证错误:

after_create :set_initial_collection_amount
def set_initial_collection_amount
 self.initial_collection_amount ||= self.amount * 0.15
end

结果类似于initial_collection_amount cannot be blank

使用initial_collection_amountafter_initialize设置为0,然后运行上面的after_create似乎很草率,实际上甚至无法按我认为的方式工作。我为每个终端输出添加了一个puts,如下所示:

after_initialize :set_initial_collection_amount_to_0
after_create :set_initial_collection_amount_x_15
def set_initial_collection_amount_to_0
  puts "a"
  self.initial_collection_amount ||= 0
end

def set_initial_collection_amount_x_15
  puts "b"
  total = self.amount * 0.15
  self.initial_collection_amount ||= total
end

其中的终端输出在puts语句中显示a 15次。

我该怎么做?我只希望保存一个属性。如果我将allow_nil: true添加到验证中,它将另存为空白。

1 个答案:

答案 0 :(得分:1)

如果您需要在创建记录之前立即设置值,那么before_create事件似乎更适合您的用例。