模型属性不持久

时间:2018-07-04 09:22:08

标签: ruby-on-rails-4

我有一个模型Bank,该模型的持久属性为iban 数据将发送给第三方。

我想使iban不保留在数据库中,并每次都从第三方获取信息。

我所做的是这样的:

class Bank < ActiveRecord::Base
   [...]
    attr_writer :iban

    before_save :send_to_service_provider

    def iban
       ServiceProvider::BankAccount.fetch(user_id)
    end

    def send_to_service_provider
       ServiceProvider::BankAccount.create(iban: iban, user_id: user.id)
    end
end

问题是,当我在iban中获得send_to_service_provider时,它将调用我的方法,而没有获得我已经传递的值

我需要将getter和setter的名称保持为iban,因为这是API的一部分,并且我不需要重构前端和应用程序

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

考虑使用实例变量:

class Bank < ActiveRecord::Base
  [...]

  before_save :send_to_service_provider

  def iban
    ServiceProvider::BankAccount.fetch(user_id)
  end

  def iban=(value)
    @iban = value
  end

  def send_to_service_provider
    ServiceProvider::BankAccount.create(iban: @iban, user_id: user.id)
  end
end

这样,您甚至可以考虑缓存ServiceProvider:

  def iban
    @iban ||= ServiceProvider::BankAccount.fetch(user_id)
  end