質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

197閲覧

form_forで送った情報をコントローラで受け取れずエラーになる。

gs13

総合スコア15

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/06/20 01:45

編集2019/06/20 03:30

前提・実現したいこと

一覧を表示する際、デフォルト(show_all=0)ではフラグ(show_flag)がtrueのもののみ、一覧画面で、すべて表示するを選択(show_all=1)した場合には、フラグがtrue/falseのものをすべて表示するようにしたい。

発生している問題・エラーメッセージ

フォームからデータ(show_all)をコントローラでどう受け取ったらいいのかがわからず困っている。
エラーメッセージ

param is missing or the value is empty

イメージ説明

該当のソースコード

carriers_controller.rb

Ruby

1class CarriersController < ApplicationController 2 def index 3 #carrier = Carrier.find_by(show_flag: false) 4 if params[:show_all] 5 @carrier = Carrier.all 6 else 7 @carrier = Carrier.where(show_flag: true) 8 end 9 end 10 11 def edit 12 @carrier = find_carrier_by_id 13 end 14 15 def update 16 @carrier = find_carrier_by_id 17 if @carrier.update(carrier_params) 18 redirect_to carriers_path, notice: "#{@carrier.name}を更新しました。" 19 else 20 render action: :edit 21 end 22 end 23 24 def new 25 @carrier = Carrier.new 26 end 27 28 def create 29 #@carriers = Carrier.new(params[:carrier]) 30 @carrier = Carrier.new(carrier_params) 31 if @carrier.save 32 #flash[:notice]="新規データを登録しました。" 33 redirect_to carriers_path, notice: "#{@carrier.name}を登録しました。" 34 #redirect_to "/carriers" 35 #redirect_to carriers_path 36 else 37 #failse kakikomi 38 render action: :new 39 end 40 end 41 42 def destroy 43 @carrier = find_carrier_by_id 44 @carrier.destroy 45 redirect_to carriers_path, notice: "#{@carrier.name}を削除しました。" 46 end 47 48 def carrier_params 49 params.require(:carrier).permit(:code, :name, :show_flag) 50 end 51 52 def find_carrier_by_id 53 Carrier.find(params[:id]) 54 end 55 56end 57

index.html.erb

Ruby

1<div> 2 <div class="col-lg-12"> 3 <h3 class="page-header"><%=raw @page_title || 'AmazonCarrierマスター管理'%></h3> 4 </div> 5 <% if flash[:notice] %> 6 <p><%= flash[notice] %></p> 7 <% end %> 8 <table> 9 <thead> 10 <tr> 11 <th class>フラグ</th> 12 <th class=''>コード</th> 13 <th class=''>名前</th> 14 </tr> 15 </thead> 16 <tbody> 17 <% @carrier.each do |a| %> 18 <tr> 19 <td><%= a.show_flag %></td> 20 <td><%= link_to a.code, edit_carrier_path(a.id) %></td> 21 22 <% if a.show_flag == true then %> 23   <td><%= a.name %></td> 24 <% end %> 25 </tr> 26 <% end %> 27 28 <div> 29 <%= link_to "新規登録", new_carrier_path %> 30 </div> 31 32 <%= form_for :show_all do |f| %> 33 <div> 34 <%= f.check_box :show_all,:as => :boolean %> 35 <%= f.label :"すべて表示する" %> 36 <%= f.submit "表示切替" %> 37 </div> 38 <% end %> 39 40 </tbody> 41 </table> 42</div><%=debug(params)%> 43

schema.rb

Ruby

1 create_table "carriers", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| 2 t.string "code" 3 t.string "name" 4 t.datetime "created_at", null: false 5 t.datetime "updated_at", null: false 6 t.boolean "show_flag", default: false, null: false 7 end

補足情報(FW/ツールのバージョンなど)

Rails 5.0.7.2
Ubuntu VERSION="16.04.6 LTS (Xenial Xerus)"
Win10 VirtuaBox上
ruby 2.4.6p354
gem 2.6.14.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

erb

1<%# 一覧画面に送信したいのならばそのようにpathを指定すること %> 2<%= form_for :show_all, url: ..., method: :get do |f| %>

rb

1# この形で受け取りたいのであればform_forではなくform_tagを使うべき 2if params[:show_all] 3# 今のform_forの形のまま受け取るのであれば以下の形となる 4if params[:show_all][:show_all]

投稿2019/06/20 02:06

編集2019/06/20 02:07
Mugheart

総合スコア2340

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まずは、実際に生成されたフォームを見てみましょう。

form_for @carrierとすればフォーム要素のnamecarrier[名前]となって、params.require(:carrier)で受け取れますが、このようにform_forをシンボルで書いた場合、フォーム要素のnameが別のものになっているかと思います。

carrier[名前]のようなnameのフォームが1つも送られてこなければ、params.require(:carrier)に失敗します。

投稿2019/06/20 01:49

編集2019/06/20 01:50
maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問