コントローラーの更新方法
class InvoicesController < ApplicationController
def update
@invoice = Invoice.find(params[:id])
respond_to do |format|
if @invoice.update_attributes(params[:invoice])
format.html { redirect_to invoices_path }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @invoice.errors}
end
end
end
end
モデル
請求書.rb
class Invoice < ActiveRecord::Base
has_many :invoice_line_items,:dependent => :destroy
accepts_nested_attributes_for :invoice_line_items,:allow_destroy => true
attr_accessible :invoice_dt, :invoice_no,:invoice_line_items_attributes,:amount_due,:tax1,:tax2,:tax3,:tax4,:tax5,:tax1_value,:tax2_value,:tax3_value,:tax4_value,:tax5_value
attr_accessor :amount_due,:tax1,:tax2,:tax3,:tax4,:tax5,:tax1_value,:tax2_value,:tax3_value,:tax4_value,:tax5_value
請求明細書.rb
class InvoiceLineItem < ActiveRecord::Base
belongs_to :invoice
attr_accessible :invoice_id, :item_description, :item_no, :quantity, :unit_price,:taxes,:tax1,:tax2,:tax3,:tax4,:tax5
attr_accessor :tax1,:tax2,:tax3,:tax4,:tax5
serialize :taxes, Hash
before_validation :my_taxes
def my_taxes
debugger
self.taxes = {"tax1" => self.tax1,"tax2" => self.tax2,"tax3" => self.tax3,"tax4" => self.tax4,"tax5" => self.tax5}
end
end
データを更新しようとすると問題が発生します。更新日に、デバッガーでチェックしている間にすべての更新された値を取得しますが、データベースには保存されません。その理由の 1 つは、create では正常に呼び出されたが update 操作では呼び出されなかった「add_taxes」メソッドであることがわかりました。また、「税金」変数がシリアル化され、accepted_nested_attributes _for を使用したことも覚えておいてください。
誰でも私を助けてください。