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

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

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

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

Ruby

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

Q&A

解決済

2回答

396閲覧

param is missing or the value is empty

ShinsukeJPN

総合スコア8

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2018/04/19 07:02

編集2018/04/19 09:42

前提・実現したいこと

語学学習の先生・生徒のマンツーマンレッスンのマッチングサイトを作っています。
登録されている先生のindexページで、生徒がメッセージのリクエストを送信するという機能を実装したいのですが、エラーが出てうまくいきません。

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

ActionController::ParameterMissing in RequestsController#create param is missing or the value is empty: request Parameters: {"utf8"=>"✓", "authenticity_token"=>"/24q3AE8dRvzf6iuEyRibLQirvu9jfzX+6Efq+ThMLLHFiRzUFUjHcvFvffC6xwGG129ZsmcTe+8Ye/onjI0PQ==", "commit"=>"メッセージリクエスト", "teacher_id"=>"4"}

該当のソースコード

teachers_controller

Ruby

1class TeachersController < ApplicationController 2 3 def index 4 @request = Request.new 5 @user = current_user 6 @teachers = Teacher.all 7 @student = @user.student 8 end 9 private 10 11 def teacher_params 12 params.require(:teacher).permit(:user_id, :budget, :japanese_level, :first_language, :message) 13 end 14 15end

requests_controller

Ruby

1class RequestsController < ApplicationController 2 def create 3 @request = Request.new(requests_params) 4 @request.student_id = params[:student_id] 5 @request.save 6 end 7 8 private 9 def requests_params 10 params.require(:request).permit(:teacher_id, :student_id, :status) 11 end 12end 13

index.html.erb(teacher)

Ruby

1<% @teachers.each do |t| %> 2 <%= attachment_image_tag t.user,:image, class:"index_img", fallback: "No_img.jpg" %> 3 <table> 4 <tr> 5 <td><div class="fa fa-user"><%= t.user.nickname %>--<%= t.user.age %></td> 6 </tr> 7 <tr> 8 <td><div class="fa fa-comment"><%= t.message %></td> 9 </tr> 10 <tr> 11 <td><%= form_for(@request, url: teacher_requests_path(t.id), method: :post) do |f| %> 12 <% f.hidden_field :teacher_id, :value => t.id %> 13 <% f.hidden_field :student_id, :value => @student.id %> 14 <% f.hidden_field :status, :value => 0 %> 15 <%= f.submit "メッセージリクエスト", class:"btn btn-default" %> 16 <% end %> 17 </td> 18 </tr> 19 </table> 20 <% end %>

routes.rb

Ruby

1Rails.application.routes.draw do 2 get 'rooms/show' 3 4 devise_for :users 5 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 6 root 'tops#top' 7 get '/rules' => 'tops#rules' 8 9 resources :users do 10 resources :teachers, shallow: true, except: [:index] do 11 resource :favorites, only: [:create, :destroy] 12 resources :requests 13 end 14 resources :students, shallow: true, except: [:index] do 15 resource :favorites, only: [:create, :destroy] 16 resources :requests 17 end 18 resources :rooms, only: [:index] 19 end 20 21 resources :rooms, except: [:index] do 22 resources :messages, shallow: true, except: [:edit] 23 end 24 resources :students, only: [:index] 25 resources :teachers, only: [:index] 26 27end

teacher.rb

class Teacher < ApplicationRecord belongs_to :user has_many :requests, through: :student enum japanese_level: {話せない: 0,日常会話レベル: 1,ビジネスレベル: 2,ネイティブレベル: 3} end

student.rb

class Student < ApplicationRecord belongs_to :user has_many :teachers, through: :requests enum japanese_level: {話せない: 0,日常会話レベル: 1,ビジネスレベル: 2,ネイティブレベル: 3} end

request.rb

class Request < ApplicationRecord belongs_to :teacher belongs_to :student enum status: {新規リクエスト: 0, 承認済み: 1, 拒否: 2} end

試したこと

エラーの内容から、requestで受け取りたいパラメータが渡ってきていないことは分かるのですが、解消の仕方がわかりません。
ちなみに、hidden_fieldを使わずにnumber_fieldでデータを送るとエラーにならず、 "request"=>{"student_id"=>"1", "status"=>"0"}という結果になります。requestのパラメータが{ }で囲まれているのが何かヒントになりそうなのですが検索してもうまくヒットしません。

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

初心者で、始めて質問させていただきます。抜けている点などありましたらご指摘ください。
よろしくおねがいいたします。

開発環境
ruby 2.3.6
Rails 5.1.6

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

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

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

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

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

guest

回答2

0

自己解決

viewの
<% f.hidden_field :student_id, :value => @student.id %>で、<%"="のつけ忘れでした。要らないと勘違いしていました。初歩的すぎてすみません。

投稿2018/04/22 05:55

編集2018/04/25 06:35
ShinsukeJPN

総合スコア8

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

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

0

ウェブアプリ開発には疎いもので、Railsではどうやってデバッグするんだろうと興味をもちまして、調べてみました。

rails デバッグ 手法でぐぐりました。

qiitaの記事

昔ながらのprintデバッグもありつつ、byebugというデバッグ用gemパッケージがあるそうです。

投稿2018/04/19 07:20

kazto

総合スコア7196

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

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

ShinsukeJPN

2018/04/19 10:16

回答ありがとうございます! byebugは使っていて、teachersコントローラーのインスタンスにはデータが入っていることは確認しているのですが、indexページでデータを送信すると、その時点でエラーが発生してしまい、データの確認などがエラー画面からしか確認できない状態です・・・。 パラメータの内容からstudent_idとstatusがうまく送れていないことはなんとなく分かるのですが、これをどうデバッグで解決するのかよくわかりません。初心者なのでうまく調べられていないのかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問