ユーザーがさまざまな金融商品を監視するのに役立つアプリケーションを作成しました。
それぞれが異なる種類の金融商品 (クレジット カード、普通預金口座など) を追跡する約 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 Dirty Model アプローチは、私が子を作成したことを認識せず、親を保存する必要があります。
このモデルの子を作成したこと、およびモデル (およびその子) を保存する必要があることを Rails に伝えるにはどうすればよいですか?
重要な場合、問題のすべてのフォームは、実際にはcreditcard_account
にネストさfields_for
れていform_for :user
ます。
前もって感謝します!