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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

4124閲覧

【rails】hidden_fieldのparamsが使えない

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2016/10/07 03:33

編集2016/10/07 14:11

###前提・実現したいこと

ひとつのnew.html.erbで三種類のテーブルに保存できるようそれぞれのform_forを設定しています。

3つのform_forは独立して動かしたいのですが、連動してしまいapple_params is missing or the value is empty:appleというエラーが出てしまいます。

そこでform_forにhidden_fieldを設定し、そのparams[:flag]の値によってcase文で連動を防ごうとしているのですが、エラーになってしまいます。

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

正しい書き方がわかりません。

undefined local variable or method 'params' for ItemsController:Class

###該当のソースコード

new.html.erb

ruby

1<%= form_for @orange, :url => {:action => :create} do |f| %> 2 <%= f.hidden_field :flag, :value => "orange" %> 3 <%= f.file_field :image %> 4 # ~略~ 5<% end %> 6 7<%= form_for @apple, :url => {:action => :create} do |f| %> 8 <%= f.hidden_field :flag, :value => "apple" %> 9 <%= f.file_field :image %> 10 # ~略~ 11<% end %> 12 13<%= form_for @grape, :url => {:action => :create} do |f| %> 14 <%= f.hidden_field :flag, :value => "grape" %> 15 <%= f.file_field :image %> 16 # ~略~ 17<% end %> 18

controller

ruby

1def create 2 Orange.create(orange_params) 3 @oranges = Orange.all 4 5 Apple.create(apple_params) 6 @apples = Apple.all 7 8 9 Grape.create(grape_params) 10 @grapes = Grape.all 11end 12 13private 14 case params[:flag15 when orange 16 def orange_params 17 params.require(:orange).permit(:image, :use_list) 18 19 when apple 20 def apple_params 21 params.require(:apple).permit(:image, :use_list) 22 23 when grape 24 def grape_params 25 params.require(:grape).permit(:image, :use_list) 26 27 else 28 end 29end

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

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

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

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

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

guest

回答1

0

ベストアンサー

orange_paramsメソッドが構文エラーになっていませんか?

Ruby

1params.require(:orange).permit(:image, :use_list # )がない

※10/9追記
以下create_paramsを定義し、呼び出す側はOrange.create(create_params)というようにしてください。

Ruby

1private 2 def create_params 3 case params[:flag4 when orange 5 def orange_params 6 params.require(:orange).permit(:image, :use_list) 7 8 when apple 9 def apple_params 10 params.require(:apple).permit(:image, :use_list) 11 12 when grape 13 def grape_params 14 params.require(:grape).permit(:image, :use_list) 15 16 else 17 end 18 end 19end

投稿2016/10/07 14:08

編集2016/10/08 17:15
goute

総合スコア216

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

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

退会済みユーザー

退会済みユーザー

2016/10/07 14:11

ありがとうございます。直してみましたがエラー変わらずでした。
goute

2016/10/07 14:35

おそらく「paramsなんてメソッドまたは変数がない」と言われています。 private 内にメソッドを一つ書いて、Orange・Apple・Grapeそれぞれのnewでその関数を呼び出し、その関数内でcase文を書いてうまくいきませんかね?
退会済みユーザー

退会済みユーザー

2016/10/08 12:51

すみません、書き方がわからないのでもしよろしければ書いていただくことは可能でしょうか?申し訳ないです。
goute

2016/10/08 17:15

追記しましたのでご確認ください。
退会済みユーザー

退会済みユーザー

2016/10/09 11:44

返信遅くなりましたが、解決できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問