Rails5.1.3でWebアプリケーション制作の勉強をしています。
2つのパターンでレコードの保存を行っていますが、一方は問題なく保存され、片方はsutoronnguパラメータでエラーが発生してしまいます。
ほとんど同じコードなのですが自力でミスを発見できないので教えていただけないでしょうか?
エラーコードの中にnil:NilClassがあるので更新した値を取得できていないのが原因だと思いますが、成功するコードと
失敗するコードのどこが悪いのか見つけることができません。
エラーの内容は以下になります。
NoMethodError in Admin::EighteensController#update private method `require' called for nil:NilClass Extracted source (around line #19): private 18 def eighteen_params 19 @params.require(:eighteen).permit(:m_1, :m_2, :m_3, :c_1, :m_4, :m_5, :m_6, :c_2, :m_7, :m_8, :m_9, :c_3, :m_10, :m_11, :m_12, :c_4, :transfer_m_1, :transfer_m_2, :transfer_m_3, :transfer_c_1, :transfer_m_4, :transfer_m_5, :transfer_m_6, :transfer_c_2, :transfer_m_7, :transfer_m_8, :transfer_m_9, :transfer_c_3, :transfer_m_10, :transfer_m_11, :transfer_m_12, :transfer_c_4) 20 end
保存に成功するコード eighteens_controller.rb def edit @eighteen_form = Admin::EighteenForm.new(Eighteen.find(params[:id])) def update @eighteen_form = Admin::EighteenForm.new(Eighteen.find(params[:id])) @eighteen_form.assign_attributes(params[:form]) if @eighteen_form.save flash.notice = '更新しました。' if $quarter20 <= 10 redirect_to :point_acquisition_admin_record else redirect_to :bonus_acquisition_admin_record end else flash.now.alert = '入力に誤りがあります。' render action: 'edit' end ↓ edit.html.erb <%= form_for @eighteen_form, as: 'form', url: [ :admin, @eighteen_form.eighteen ] do |f| %> <%= render 'form', f: f %> <div class="buttons"> <%= f.submit '更新' %> <%= link_to 'キャンセル', :point_acquisition_admin_record %> </div> <% end %> ↓ _eighteen_fields.html.erb <%= markup do |m| p = confirming ? ConfirminEeighteenFormPresenter.new(ff, self) : EighteenFormPresenter.new(ff, self) p.with_options(required: true) do |q| m << q.drop_down_list_block(:transfer_m_2, '2月スコア', Eighteen::TRANSFER) end end %> ↓ eighteen_form.rb class Admin::EighteenForm include ActiveModel::Model attr_accessor :eighteen delegate :persisted?, :save, to: :eighteen def initialize(eighteen = nil) @eighteen = eighteen @eighteen ||= Eighteen.new end def assign_attributes(params = {}) @params = params eighteen.assign_attributes(eighteen_params) end private def eighteen_params @params.require(:eighteen).permit(:m_1, :m_2, :m_3, :c_1, :m_4, :m_5, :m_6, :c_2, :m_7, :m_8, :m_9, :c_3, :m_10, :m_11, :m_12, :c_4, :transfer_m_1, :transfer_m_2, :transfer_m_3, :transfer_c_1, :transfer_m_4, :transfer_m_5, :transfer_m_6, :transfer_c_2, :transfer_m_7, :transfer_m_8, :transfer_m_9, :transfer_c_3, :transfer_m_10, :transfer_m_11, :transfer_m_12, :transfer_c_4) end end
保存に失敗するコード eighteens_controller.rb def edit @eighteen_form = Admin::EighteenForm.new(Eighteen.find(params[:id])) def update @eighteen_form = Admin::EighteenForm.new(Eighteen.find(params[:id])) @eighteen_form.assign_attributes(params[:form]) if @eighteen_form.save flash.notice = '更新しました。' if $quarter20 <= 10 redirect_to :point_acquisition_admin_record else redirect_to :bonus_acquisition_admin_record end else flash.now.alert = '入力に誤りがあります。' render action: 'edit' end ↓ edit.html.erb <%= form_for @eighteen_form, as: 'form', url: [ :admin, @eighteen_form.eighteen ] do |f| %> <%= render 'form', f: f %> <div class="buttons"> <%= f.submit '更新' %> <%= link_to 'キャンセル', :bonus_acquisition_admin_record %> </div> <% end %> ↓ _eighteen_quartre_fields.html.erb <%= markup do |m| p = confirming ? ConfirminEeighteenFormPresenter.new(ff,self) : EighteenFormPresenter.new(ff, self) p.with_options(required: true) do |q| m << q.drop_down_list_block(:transfer_c_1, '1クオーター', Eighteen::TRANSFER) end end %> ↓ eighteen_form.rb class Admin::EighteenForm include ActiveModel::Model attr_accessor :eighteen delegate :persisted?, :save, to: :eighteen def initialize(eighteen = nil) @eighteen = eighteen @eighteen ||= Eighteen.new end def assign_attributes(params = {}) @params = params eighteen.assign_attributes(eighteen_params) end private def eighteen_params @params.require(:eighteen).permit(:m_1, :m_2, :m_3, :c_1, :m_4, :m_5, :m_6, :c_2, :m_7, :m_8, :m_9, :c_3, :m_10, :m_11, :m_12, :c_4, :transfer_m_1, :transfer_m_2, :transfer_m_3, :transfer_c_1, :transfer_m_4, :transfer_m_5, :transfer_m_6, :transfer_c_2, :transfer_m_7, :transfer_m_8, :transfer_m_9, :transfer_c_3, :transfer_m_10, :transfer_m_11, :transfer_m_12, :transfer_c_4) end end
どなたか教えていただけないでしょうか?宜しくお願いします。
追記
一つずづ動作確認チェックしたらeighteen_form.rb以外の表示は正常に表示できています。
保存時にえらーが出てしまうのでedit,updateアクションとeighteen_form.rbに問題があるのかと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/18 14:39