Ruby on Railsで販売管理システムを開発しています。
仕入テーブル(Purchases)にデータを登録する際に、画面で入力した値によって以下値に初期値を設定する処理でエラーが発生しています。
NoMethodError in PurchasesController#create
undefined method `initialize_purchase' for #Purchase:0x007f838c6237b8 Did you mean?initialize_dup
- 残在庫:在庫数(画面入力値)
- 残金額:金額(画面入力値)
- 単価:金額/在庫数
- ステータス:"入荷済み"
スコープ「initialize_purchase」を呼び出さず、「update_attributes!」以降のコードを直接コントローラーに記述すると、正常に動作します。スコープの書き方がおかしいのでしょうか?
ご教授いただきたいです。よろしくお願いいたします。
purchases_controller.rb def create purchase = Purchase.new(purchase_params) purchase.initialize_purchase(purchase) if purchase.save redirect_to purchases_path, notice: "登録しました" else redirect_to purchases_path, alert: "登録に失敗しました" end end private def purchase_params params.require(:purchase).permit(:purchase_date, :product_id, :supplier_id, :purchase_stock, :purchase_price) end
purchase.rb scope :initialize_purchase, -> (purchase) { update_attributes!( purchase_remaining_stock: purchase.purchase_stock, purchase_remaining_price: purchase.purchase_price, purchase_unit_price: purchase.purchase_price.div(purchase.purchase_stock), purchase_status: "入荷待ち" ) }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。