Ruby on Rails - 在before_save中获取polymorphic_id

时间:2015-11-24 11:18:21

标签: ruby-on-rails ruby activerecord polymorphism

我有两个型号:

多晶型

class Custo < ActiveRecord::Base
  belongs_to :custavel, polymorphic: true
  accepts_nested_attributes_for :custavel, allow_destroy: true
  validates_presence_of :numero, :serie
  validates_uniqueness_of :numero, scope: :serie
end

另一个班级

class Pagamento < ActiveRecord::Base
  has_one :custo, as: :custavel
end

一般来说, numero 系列由用户输入填充,但当多态是 Pagamento 时我需要用 custavel_id 填充 numero 列。

然后,我试了一下:

before_save :set_numero
def set_numero
  return unless custavel_type == 'Pagamento'
  write_attribute(:numero, custavel_id)
end

但验证失败,因为 custavel_id 尚未存在。怎么做?

1 个答案:

答案 0 :(得分:2)

修改callback方法

before_save :set_numero

def set_numero
  write_attribute(:numero, custavel_id) if custavel_type == 'Pagamento'
end