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

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

ただいまの
回答率

90.48%

  • Ruby

    7923questions

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

  • Ruby on Rails 5

    1962questions

param is missing or the value is empty

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 276

ShinsukeJPN

score 2

 前提・実現したいこと

語学学習の先生・生徒のマンツーマンレッスンのマッチングサイトを作っています。
登録されている先生の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

class TeachersController < ApplicationController

    def index
        @request = Request.new
        @user = current_user
        @teachers = Teacher.all
        @student = @user.student
    end
    private

    def teacher_params
        params.require(:teacher).permit(:user_id, :budget, :japanese_level, :first_language, :message)
    end

end

requests_controller

class RequestsController < ApplicationController
    def create
        @request = Request.new(requests_params)
        @request.student_id = params[:student_id]
        @request.save
    end

    private
    def requests_params
        params.require(:request).permit(:teacher_id, :student_id, :status)
    end
end

index.html.erb(teacher)

<% @teachers.each do |t| %>
            <%= attachment_image_tag t.user,:image, class:"index_img", fallback: "No_img.jpg" %>
                        <table>
                            <tr>
                                <td><div class="fa fa-user"><%= t.user.nickname %>--<%= t.user.age %></td>
                            </tr>
                            <tr>
                                <td><div class="fa fa-comment"><%= t.message %></td>
                            </tr>
                            <tr>
                                <td><%= form_for(@request, url: teacher_requests_path(t.id), method: :post) do |f| %>
                                    <% f.hidden_field :teacher_id, :value => t.id %>
                                    <% f.hidden_field :student_id, :value => @student.id %>
                                    <% f.hidden_field :status, :value => 0 %>
                                    <%= f.submit "メッセージリクエスト", class:"btn btn-default" %>
                                    <% end %>
                                    </td>
                            </tr>
                        </table>
            <% end %>


routes.rb

Rails.application.routes.draw do
  get 'rooms/show'

  devise_for :users
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root 'tops#top'
  get '/rules' => 'tops#rules'

    resources :users do
      resources :teachers, shallow: true, except: [:index] do
            resource :favorites, only: [:create, :destroy]
        resources :requests
    end
    resources :students, shallow: true, except: [:index] do
       resource :favorites, only: [:create, :destroy]
         resources :requests
    end
    resources :rooms, only: [:index]
  end

  resources :rooms, except: [:index] do
    resources :messages, shallow: true, except: [:edit]
  end
  resources :students, only: [:index]
  resources :teachers, only: [:index]

end

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

qiitaの記事

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/19 19:16

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

    キャンセル

関連した質問

同じタグがついた質問を見る

  • Ruby

    7923questions

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

  • Ruby on Rails 5

    1962questions