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

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

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

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

Ruby

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

MySQL

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

Ruby on Rails

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

Q&A

1回答

1633閲覧

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

mnbdyunan

総合スコア9

Ruby on Rails 5

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

Ruby

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

MySQL

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

Ruby on Rails

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

0グッド

0クリップ

投稿2018/06/23 08:52

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

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

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

ruby

1# app/views/kanrigamen/keijibans/show.html.erb 2 3<h1>Q. <%= @question.title %></h1> 4 5<section class="paragraph"> 6 7 <p><%= @question.nickname %>さんからの投稿</p> 8 <p><%= @question.content %></p> 9 10 <%= form_tag("/kanrigamen/keijibans/#{@question.id}/answers", method: :post) do %> 11 <textarea cols="30" name="text" placeholder="コメントする" rows="2"></textarea> 12 <input type="submit" value="コメントする"> 13 <% end %> 14 15</section>

ruby

1# app/controllers/kanrigamen/keijibans_controller.rb 2 3class Kanrigamen::KeijibansController < ApplicationController 4 5 def show 6 @question = Question.find(params[:id]) 7 end 8 9end 10

ruby

1# routes.rb 2 3 namespace :kanrigamen do 4 resources :keijibans do 5 resources :answers, only: [:create] 6 end 7 end

rails routes で確認すると、

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

となります。

ruby

1# app/controllers/kanrigamen/answers_controller.rb 2 3class Kanrigamen::AnswersController < ApplicationController 4 5 def create 6 Answer.create(text: answer_params[:text], question_id: answer_params[:keijiban_id] 7 end 8 9 private 10 def answer_params 11 params.permit(:text, :keijiban_id) 12 end 13 14end

ruby

1# app/models/answer.rb 2 3class Answer < ApplicationRecord 4 belongs_to :question 5 belongs_to :user 6 belongs_to :administrator 7end 8

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

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

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

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

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

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

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

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

guest

回答1

0

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

ruby

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

ですね

https://railsguides.jp/active_record_validations.html

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

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


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

投稿2018/06/25 09:23

asm

総合スコア15147

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問