我有一个接受虚拟属性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。
谢谢!
attr_accessor
定义实例变量和访问它的方法(读/写)。
所以简单的方法是写:
def open_ledger_account
create_ledger_account!(opening_balance: @opening_balance)
end
read_attribute
仅在opening_balance
是数据库中Customer
上的属性时才有效。