【发布时间】:2019-11-26 08:28:06
【问题描述】:
我有一个模型Customer,它接受一个虚拟属性opening_balance。代码如下所示:
model Customer < ApplicationRecord
attr_accessor :opening_balance
has_one :ledger_account
after_create :open_ledger_account
def opening_balance
ledger_account.opening_balance if ledger_account.present?
end
private
def open_ledger_account
create_ledger_account!(opening_balance: self.opening_balance)
end
但这里的问题是self.opening_balance 调用的是类中定义的方法,而不是存储在 attr_accessor 的 opening_balance 属性中的值。
我尝试了另一种解决方案:
def open_ledger_account
create_ledger_account!(opening_balance: self.read_attribute(:opening_balance))
end
但这也行不通。
如何读取存储在实际属性中的值?任何帮助,将不胜感激。我正在使用 Rails 5.1。
谢谢!
【问题讨论】:
-
opening_balance属性在保存前可用。保存客户对象后,在回调中它只获取与新创建的客户对象关联的属性。我建议您使用嵌套表单来执行此操作,在自定义模型中您可以获得opening_balance作为嵌套属性。
标签: ruby-on-rails activerecord ruby-on-rails-5