我有一个模型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的一部分,并且我不需要重构前端和应用程序
非常感谢您的帮助
答案 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