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

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

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

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

2回答

10591閲覧

rails でレビューを実装したいのですがform作成でエラーが出ます。

k.m.m.m

総合スコア77

Ruby

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

2クリップ

投稿2016/03/25 06:55

編集2016/03/28 10:17

rails4.2.5です。

evaluationsテーブルにフォームで値を送信しようと思っているのです
が、evaluations_controller.rbのstrong parametersを作成すると

param is missing or the value is empty: evaluations

というエラーが起きてしまいます。

コードは以下のとおりです。

evaluations_controller.rb

lang

1class EvaluationsController < ApplicationController 2 3 def evaluation 4 @teacher = Teacher.find_by(params[:teacher_id]) 5 @evaluations = current_student.evaluations.build(evaluation_params) 6 @evaluations.save 7 end 8 9 def index 10 @teacher = Teacher.find_by(params[:teacher_id]) 11 @evaluations_of_teacher = @teacher.evaluations.all 12 end 13 14 15private 16 17 def evaluation_params 18 params.require(:evaluations).permit( :title, :body, :teacher_id ) 19 end 20 21end 22

views/evaluations/evaluation.html.erb

<%= form_for @evaluations, url: evaluation_path, method: :post do |f| %> <p><%= f.text_field :title %></p> <p><%= f.text_area :body %></p> <%= f.hidden_field :teacher_id, :value => @teacher.id %> <%= f.submit %> <% end %>

schemafile

lang

1create_table "evaluations", force: :cascade do |t| 2 t.integer "teacher_id", default: "" 3 t.integer "student_id" 4 t.string "title", default: "" 5 t.text "body" 6 7 t.datetime "created_at", null: false 8 t.datetime "updated_at", null: false 9end

routes.rb

lang

1Rails.application.routes.draw do 2 root 'home#index' 3 4 devise_for :teachers, :controllers => { 5 :sessions => "teachers/sessions", 6 :registrations => "teachers/registrations", 7 :passwords => "teachers/passwords", 8 # :omniauth_callbacks => "teachers/omniauth_callbacks" 9 } 10 11 12 13 devise_for :students, :controllers => { 14 :sessions => "students/sessions", 15 :registrations => "students/registrations", 16 :passwords => "students/passwords", 17 # :omniauth_callbacks => "students/omniauth_callbacks" 18 } 19 20 21 resources :teachers, only: [:show, :index] do 22 resources :evaluations, only: [:index] 23 end 24 25 get 'evaluation' => evaluations#evaluation', as:'evaluation' 26 post 'evaluation' => 'evaluations#evaluation' 27 delete 'unevaluation/:teacher_id' => 'evaluations#unevaluation' 28 29 30 # The priority is based upon order of creation: first created -> highest priori 31ty. 32 # See how all your routes lay out with "rake routes". 33 34 # You can have the root of your site routed with "root" 35 # root 'welcome#index' 36 37 # Example of regular route: 38 # get 'products/:id' => 'catalog#view' 39 40 # Example of named route that can be invoked with purchase_url(id: product.id) 41 # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase 42 43 # Example resource route (maps HTTP verbs to controller actions automatically): 44 # resources :products 45 46 # Example resource route with options: 47 # resources :products do 48 # member do 49 # get 'short' 50 # post 'toggle' 51 # end 52 # 53 # collection do 54 # get 'sold' 55 # end 56 # end 57 58 # Example resource route with sub-resources: 59 # resources :products do 60 # resources :comments, :sales 61 # resource :seller 62 # end 63 64 # Example resource route with more complex sub-resources: 65 # resources :products do 66 # resources :comments 67 # resources :sales do 68 # get 'recent', on: :collection 69 # end 70 # end 71 72 # Example resource route with concerns: 73 # concern :toggleable do 74 # post 'toggle' 75 # end 76 # resources :posts, concerns: :toggleable 77 # resources :photos, concerns: :toggleable 78 79 # Example resource route within a namespace: 80 # namespace :admin do 81 # # Directs /admin/products/* to Admin::ProductsController 82 # # (app/controllers/admin/products_controller.rb) 83 # resources :products 84 # end 85end 86

strong parametersの記述をコメントアウトすると、
strong parametersを必要としない値はちゃんとevaluationsテーブルに保存されるのに、
strong parametersの記述をすると、

ActionController::ParameterMissing (param is missing or the value is empty: evaluations):

というエラーが表示されます。
たくさんググっても解決策が見当たらなかったので分かる方教えて欲しいです。

ググったサイト
http://nograve.hatenadiary.jp/entry/2015/11/05/161948

http://hbnist76.blog.fc2.com/blog-entry-424.html

http://ja.stackoverflow.com/questions/399/rails4%E3%81%A7%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AEpost%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E3%81%97%E3%81%9F%E3%81%84%E3%81%8C-actioncontrollerparametermissing-%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%81%A7%E3%81%8D%E3%81%AA

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

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

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

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

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

lib

2016/03/26 00:13

ただぼーっとぐぐっただけでは内容が伝わらないので、どのサイトのどの情報を確認して、どう判断したのか。それも明示してください。
k.m.m.m

2016/03/26 05:22 編集

解答ありがとうございます。 http://nograve.hatenadiary.jp/entry/2015/11/05/161948 http://hbnist76.blog.fc2.com/blog-entry-424.html http://ja.stackoverflow.com/questions/399/rails4%E3%81%A7%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AEpost%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E3%81%97%E3%81%9F%E3%81%84%E3%81%8C-actioncontrollerparametermissing-%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7%E3%83%86%E3%82%B9%E3%83%88%E3%81%A7%E3%81%8D%E3%81%AA 「param is missing or the value is empty: エラー」とググって上記のサイトを見たのですが、どれも参考になるようなことは書いていなかったです、、、。 これらのサイトを確認して自分の直面しているエラーとは種類が違うので、 これらのさいとでは自分のエラーは修正できないと判断しました。
lib

2016/03/26 05:23

その内容は質問に編集という形で行うことで回答者が見やすくそして、回答しやすくなるので非常にお勧めです。情報は包み隠さず「ここまで、わかったけど○○までがわからず」という点が明確になることで、解決に結びつく速度が飛躍的にあがります。ぜひ騙されたと思って、やってみてください。
k.m.m.m

2016/03/26 05:26

ググったサイトをこのコメントの返信は見えにくかったので、質問の方にも載せていただきました。 ご指導ありがとうございます。
nami634

2016/03/26 15:27

routes.rbも載せてください
k.m.m.m

2016/03/28 10:18

遅れて申し訳有りません。 mysqlの方でエラーが発生していました。 routes.rbも追加しましたので宜しくお願いします。
guest

回答2

0

自己解決

命名を全てrailsの用意しているメソッドに従って作成したところ、解決しました。

evaluations_controller.rb

lang

1class EvaluationsController < ApplicationController 2 3 def new 4 @evaluaitons = Evaluation.new 5 end 6 7 8 def create 9 @teacher = Teacher.find(params[:teacher_id]) 10 @evaluations = current_student.evaluations.build(evaluation_params) 11 @evaluations.teacher_id = @teacher.id 12 @evaluations.save 13 @redirect_to @teacher 14 end 15 16 def index 17 @teacher = Teacher.find(params[:teacher_id]) 18 @evaluations_of_teacher = @teacher.evaluations 19 end 20 21 22private 23 24 def evaluation_params 25 params.require(:evaluations).permit( :title, :body ) 26 end 27 28end 29

view/evaluaions/new.html.erb

lang

1 2<%= form_for :evaluations,url: {action: :create} do |f| %> 3 <p><%= f.text_field :title %></p> 4 <p><%= f.text_area :body %></p> 5 <%= f.submit %> 6<% end %>

config/routes.rb

lang

1 2resources :teachers, only: [:show, :index] do 3 resources :evaluaitons, only: [:new, :create, :show, :edit, :destroy] 4 member do 5 resources :evaluations, only: [:index] 6 end 7 end

このようにしたら、ちゃんとストロングパラメーターを認識してくれて、テーブルに値が送信できるようになりました。

メソッドもformもroutingも変えたところできました。
おそらく、params is missingは、newメソッドで作成するはずの空の値が最初に入っていなければいけないのに、入っていなかったことが原因だと思われます。
よかったら参考にしてください。

投稿2016/04/01 13:12

k.m.m.m

総合スコア77

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

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

0

http://www.rubydoc.info/docs/rails/4.0.0/ActionController/ParameterMissing

Raised when a required parameter is missing.

こう書かれていますね。

つまり、パラメーターが見つからないということです。

<%= f.hidden_field :teacher_id, :value => @teacher.id %>

ここの値が送られていないと思います。
デバッグしないと分からないので、一度デバッグして値を確かめることをお勧めします。

teacher_idをhiddenで送信しないというのであれば、下記のようにすれば動くと思います。

class EvaluationsController < ApplicationController def evaluation @teacher = Teacher.find_by(params[:teacher_id]) @evaluations = current_student.evaluations.build(evaluation_params) @evaluations.id = @teacher.id ←ここを追加 @evaluations.save end def index @teacher = Teacher.find_by(params[:teacher_id]) @evaluations_of_teacher = @teacher.evaluations.all end private def evaluation_params params.require(:evaluations).permit( :title, :body)←teacher_idなくしました。 end end

投稿2016/03/26 13:13

ayu

総合スコア212

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

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

k.m.m.m

2016/03/28 10:20

返信に遅れてすみません。 mysqlのエラーを対処していました。 コード付きの非常にわかりやすい解答ありがとうございます。 ayuさんのコメントのようにやってみたのですが、 最初と変わらないエラーを吐かれてしまいました。
k.m.m.m

2016/03/30 00:32

ありがとうございます。 デバッグしてみますm(_ _)m またうまくいったら書きますのでよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問