1

私の Rails アプリケーションでは、私のグループのそれぞれに has_many :expenses があります。各費用には、多くの :shares があります。経費と株式を同時に作成できるネストされたフォームの設定に成功しました。ただし、同じフォームを使用して経費を編集しようとすると、すべてのシェアの合計が経費の合計額と等しいことを確認するために設定した検証が失敗します。

コントローラーからの更新方法は次のとおりです。

def update
  @expense = Expense.find(params[:id])
  @group = Group.find(params[:group_id])
  if @expense.update_attributes(params[:expense])
    redirect_to @group
  else
    render 'edit'
  end
end

私のモデル ファイルでは、expense.rb で accept_nested_attributes_for :shares を記述し、attr_accessible リストに :shares_attributes を追加しました。

失敗しているexpense.rbで設定した検証は次のとおりです。

def shares_must_equal_total_amount
    if self.shares.sum(:amount) != self.amount
        errors.add(:shares, " must equal expense amount")
    end
end

私が最も混乱しているのは、

puts @expense.amount and 
@expense.shares.sum(:amount)

update メソッドの else 節 (render 'edit' の前) では、2 つの値が異なります。しかし、params[:shares_attributes] では、個々の株式の金額が明らかに更新され、検証に合格しています。そのため、if @expense.update_attributes(params[:expense]) を呼び出すと、何らかの理由で @expense.shares が更新されません。

ここで何が欠けていますか?助けてくれてありがとう。

4

0 に答える 0