前提・実現したいこと
ユーザがフォームからPOSTしたデータをコントローラのインスタンス変数で受け取りたい。
Railsでアプリを作っています。
単純にフォームから送信したデータをコントローラで受け取りたいのですが、ParameterMissingが出て困っています。
データの登録はできるのですが、データの更新ができない状態です。
発生している問題・エラーメッセージ
ActionController::ParameterMissing in ItemsController#update param is missing or the value is empty: GyomuDatum Extracted source (around line #57): 55 56 57 58 59 60 def item_params # params.require(:GyomuDatum).permit(:manage_id) params.require(:GyomuDatum).permit(:manage_id, :category_id, :publish_corporation, :ip_address, :target_server, :start_date, :end_date, :comment) # params.require.fetch(:GyomuDatum,{}).permit(:manage_id, :category_id, :publish_corporation, :ip_address, :target_server, :start_date, :end_date, :comment) end Rails.root: /Myapp Application Trace | Framework Trace | Full Trace app/controllers/items_controller.rb:57:in `item_params' app/controllers/items_controller.rb:46:in `update' Request Parameters: {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"8A0DmjBpCoCfgy2+GjBi24F9bb3KG1opx1F7xSAijF9Bp1zizUrMDuiWmvZeuP75i+XXX3+zNAhHObiN2xO03A==", "gyomu_datum"=>{"manage_id"=>"a", "category_id"=>"0", "publish_corporation"=>"a", "ip_address"=>"a", "target_server"=>"a", "start_date"=>"2018-04-01", "end_date"=>"2018-04-01", "comment"=>"a?update"}, "commit"=>"Update Gyomu datum", "id"=>"37"}
該当のソースコード
edit.html.erb
<%= form_for @item, url: item_path(@item) do |f| %> <h1> データ編集 </h1> <p> 管理ID: <br> <%= f.text_field :manage_id, placeholder: '管理ID' %> </p> <p> カテゴリ: <br> <%= f.text_field :category_id, placeholder: 'カテゴリ' %> </p> <p> 発行会社: <br> <%= f.text_field :publish_corporation, placeholder: '発行会社' %> </p> <p> IPアドレス: <br> <%= f.text_field :ip_address, placeholder: 'IPアドレス' %> </p> <p> サーバ名: <br> <%= f.text_field :target_server, placeholder: 'サーバ名' %> </p> <p> 有効期限の開始: <br> <%= f.text_field :start_date, placeholder: '2018-04-01' %> </p> <p> 有効期限の終了: <br> <%= f.text_field :end_date, placeholder: '2018-04-01' %> </p> <p> コメント: <br> <%= f.text_area :comment, placeholder: 'コメント' %> </p> <p> <%= f.submit %> </p> <% end %>
new.html.erb
<%= form_for :GyomuDatum, url: items_path do |f| %> <h1> データ登録 </h1> <p> 管理ID: <br> <%= f.text_field :manage_id, placeholder: '管理ID' %> </p> <p> カテゴリ: <br> <%= f.text_field :category_id, placeholder: 'カテゴリ' %> </p> <p> 発行会社: <br> <%= f.text_field :publish_corporation, placeholder: '発行会社' %> </p> <p> IPアドレス: <br> <%= f.text_field :ip_address, placeholder: 'IPアドレス' %> </p> <p> サーバ名: <br> <%= f.text_field :target_server, placeholder: 'サーバ名' %> </p> <p> 有効期限の開始: <br> <%= f.text_field :start_date, placeholder: '2018-04-01' %> </p> <p> 有効期限の終了: <br> <%= f.text_field :end_date, placeholder: '2018-04-01' %> </p> <p> コメント: <br> <%= f.text_area :comment, placeholder: 'コメント' %> </p> <p> <%= f.submit %> </p> <% end %>
items_controller.rb
class ItemsController < ApplicationController def index @items = GyomuDatum.all.order(created_at: 'desc') end def show end def new @item = GyomuDatum.new end def create # render plain: params[:GyomuDatum].inspect # save # @item = Item.new(params[:GyomuDatum]) # @item = GyomuDatum.new(params.require(:GyomuDatum).permit(:manage_id, :category_id, :publish_corporation, :ip_address, :target_server, :start_date, :end_date, :comment)) @item = GyomuDatum.new(item_params) # @item.save # redirect # redirect_to items_path if @item.save # redirect redirect_to items_path else render plain: @item.errors.inspect # render plain: @item.errors.inspect render 'new' end end def edit @item = GyomuDatum.find(params[:id]) end def update @item = GyomuDatum.find(params[:id]) # pp @item # pp item_params if @item.update(item_params) redirect_to items_path else render 'edit' end end private def item_params # params.require(:GyomuDatum).permit(:manage_id) params.require(:GyomuDatum).permit(:manage_id, :category_id, :publish_corporation, :ip_address, :target_server, :start_date, :end_date, :comment) # params.require.fetch(:GyomuDatum,{}).permit(:manage_id, :category_id, :publish_corporation, :ip_address, :target_server, :start_date, :end_date, :comment) end # private # def post_params # params.require(:post).permit(:title, :body) # end end
試したこと
データ登録は記載しているprivateメソッドで登録ができる状態です。
補足情報(FW/ツールのバージョンなど)
・Phusion Passenger
Phusion Passenger 5.2.3
・Apache
Server version: Apache/2.4.6 (CentOS)
・Rails
Rails 4.2.10
・OSバージョン
CentOS Linux release 7.4.1708 (Core)
・Mysql
mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper
・Ruby
ruby 2.3.7p456 (2018-03-28 revision 63024) [x86_64-linux]
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/18 05:13
2018/05/18 05:22
2018/05/18 06:14