我已经构建了一个应用程序,可以帮助用户监控各种金融产品。
在大约 6-10 个不同的模型上,每个模型都跟踪不同类型的金融产品(信用卡、储蓄账户等),我之前有一个balance
列(用于存储用户的当前余额)和一个repayments
用于存储用户平均贡献的列随着时间的推移到帐户。
我现在想存储历史余额更新,我认为最好的方法是创建一个单独的balance
模型,该模型可以belongs_to
通过多态关系来处理所有这些模型。然后每个账户可以has_many
在不同的历史点上进行余额,我可以很容易地拉出最近的用户balance
。
我喜欢这个解决方案,但是我有一堆自定义的用户表单,用于创建/编辑带有balance
字段、repayments
字段和其他一些字段的帐户,这些字段将被抽象成一个Balance
模型。我不想花几个小时浏览这些表单并更改字段以适应新的嵌套结构。相反,我创建了一堆帮助方法来处理所有后端逻辑,这样我的视图就不需要以不同的方式与我的模型交互,如下所示:
#creditcard_account.rb
has_many :balances, :as => :balanceable, :dependent => :destroy
def latest_balance
balances.order("created_at DESC").first
end
def new_balance
@new_balance ||= balances.build
end
def balance=(input_balance)
new_balance.amount = input_balance
end
def balance
new_balance.balance || (latest_balance? ? self.latest_balance.amount : nil)
end
def repayment_amount=(input_repayment_amount)
new_balance.contribution_amount = input_repayment_amount
end
def repayment_amount
new_balance.contribution_amount || (latest_balance ? latest_balance.contribution_amount : nil)
end
def repayment_period=(input_repayment_period)
new_balance.contribution_period = input_repayment_period
end
def repayment_period
new_balance.contribution_period || (latest_balance ? latest_balance.contribution_period : nil)
end
问题:
这很好用,除非@new_balance如果相关的实际属性没有更改,则不会保存creditcard_account
。也就是说,Rails 脏模型方法不知道我已经创建了一个孩子并且需要保存父母。
我如何告诉 Rails 我已经为这个模型创建了一个子模型并且需要保存模型(以及它的子模型)?
如果它很重要,所有有问题的表单实际上都creditcard_account
嵌套fields_for
在form_for :user
.
提前致谢!