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

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

ただいまの
回答率

90.52%

  • Ruby

    7645questions

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

  • Ruby on Rails

    7246questions

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

  • MySQL

    5844questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Ruby on Rails 5

    1749questions

エラーが表示されないけどもテーブルに値が入らない

受付中

回答 1

投稿

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

mnbdyunan

score 1

初心者です。ruby on rails 5 でアプリケーションを作っています。

掲示板を作っています。QuestionモデルとAnswerモデルをアソシエーションさせ、それぞれquestions_controller.rbとanswers_controller.rbで制御しています。

このAnswerモデルに、別で作った管理画面からも投稿できるよう、app/controllers/kanrigamen/answers_controller.rbでanswersテーブルに値を入れようとしています。

# app/views/kanrigamen/keijibans/show.html.erb

<h1>Q. <%= @question.title %></h1>

<section class="paragraph">

  <p><%= @question.nickname %>さんからの投稿</p>
  <p><%= @question.content %></p>

  <%= form_tag("/kanrigamen/keijibans/#{@question.id}/answers", method: :post) do %>
    <textarea cols="30" name="text" placeholder="コメントする" rows="2"></textarea>
    <input type="submit" value="コメントする">
  <% end %>

</section>
# app/controllers/kanrigamen/keijibans_controller.rb

class Kanrigamen::KeijibansController < ApplicationController

  def show
    @question = Question.find(params[:id])
  end

end
# routes.rb

  namespace :kanrigamen do
    resources :keijibans do
      resources :answers, only: [:create]
    end
  end

rails routes で確認すると、

kanrigamen_keijiban_answers
POST
/kanrigamen/keijibans/:keijiban_id/answers(.:format) 
kanrigamen/answers#create

となります。

# app/controllers/kanrigamen/answers_controller.rb

class Kanrigamen::AnswersController < ApplicationController

  def create
    Answer.create(text: answer_params[:text], question_id: answer_params[:keijiban_id]
  end

  private
  def answer_params
    params.permit(:text, :keijiban_id)
  end

end
# app/models/answer.rb

class Answer < ApplicationRecord
  belongs_to :question
  belongs_to :user
  belongs_to :administrator
end

これでアプリケーションを動かすと、普通に、 app/views/kanrigamen/answers/create.html.erb が表示されます。エラー画面なども表示されません。binding.pryで確認すると、パラメーターも引き渡せてしまう。

わかりづらい質問になってしまったかもしれません。足りない情報がありましたら追記しますのでご指摘ください。

何卒よろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

+1

例外が飛んでほしいのなら

  def create
    Answer.create! text: answer_params[:text], question_id: answer_params[:keijiban_id]
  end

ですね

https://railsguides.jp/active_record_validations.html

破壊的なメソッド(save!など)では、レコードが無効な場合に例外が発生します。 非破壊的なメソッドでは無効な場合に例外を発生しません。saveとupdateは無効な場合にfalseを返し、createは無効な場合に単にそのオブジェクトを返します。

というわけで、createメソッドでは返り値を検証しないといけません。


Railsあまり詳しくないものの私見ですが
user_idおよびadministrator_idを設定していないのが問題に思えます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • Ruby

    7645questions

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

  • Ruby on Rails

    7246questions

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

  • MySQL

    5844questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Ruby on Rails 5

    1749questions