Rails-attr_accessor:-读取属性值,而不是覆盖它的函数

问题描述 投票:0回答:1

我有一个接受虚拟属性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。

谢谢!

ruby-on-rails activerecord ruby-on-rails-5
1个回答
0
投票

attr_accessor定义实例变量和访问它的方法(读/写)。

所以简单的方法是写:

def open_ledger_account
  create_ledger_account!(opening_balance: @opening_balance)
end

read_attribute仅在opening_balance是数据库中Customer上的属性时才有效。

© www.soinside.com 2019 - 2024. All rights reserved.