Rails从数据库初始化模型值

时间:2015-05-12 23:47:27

标签: ruby-on-rails ruby activerecord

我对Rails相当新,我遇到了一个我似乎无法找到解决方案的问题。我的模型代表系统中的RMA。当您生成模型的新实例时,我想查找以前的RMA编号并生成一个新编号。 RMA#设计看起来像RMA-{year}-NNN => RMA-2015-001

我目前的实施利用after_initialize来实现这一目标。但是在我测试期间,我注意到在此方法期间调用数据库似乎会导致无限循环。

这就是我的代码:

after_initialize :after_initialize

def after_initialize
  self.rma_number ||= generate_rma_number()
end

def generate_rma_number
   new_rma_array = Array.new
   new_rma_array.push("RMA")
   new_rma_array.push(Time.now.year)

   # Get the last RMA
   last_rma = Rma.select(:rma_number).order('id desc').first

   # If there is no RMA
   if(last_rma == nil)
     new_rma_array.push("001")
     return new_rma_array.join('-')
   end

   # Split the string
   current_rma_array = last_rma.rma_number.split('-')

   # Increment the RMA
   new_rma_array.push((current_rma_array[2].to_i + 1).to_s.rjust(3, '0'))
   return new_rma_array.join('-')

 end

1 个答案:

答案 0 :(得分:1)

无限循环是由您在generate_rma_number方法中进行的RMA查找引起的。

last_rma = Rma.select(:rma_number).order('id desc').first'

因为你想要的是before_create而不是after_initialize。每次初始化模型时,都会触发初始化。即使这些模型已经存在于db。