前提・実現したいこと
railsでバリデーションを設定したいのですが、全然できません。
2つのカラムを空欄の場合にデフォルトのエラーメッセージを表示する機能をつけたいのですが、
よくわかりません。
発生している問題・エラーメッセージ
ActionController::UrlGenerationError in BookersController#create No route matches {:action=>"show", :controller=>"bookers", :id=>nil}, missing required keys: [:id] Extracted source (around line #21): 19 20 21 22 23 24 booker = Booker.new(booker_params) booker.save redirect_to booker_path(booker) redirect_to bookers_path end 更新 NoMethodError in Bookers#create Showing /vagrant/Bookers/app/views/bookers/index.html.erb where line #11 raised: undefined method `each' for nil:NilClass Extracted source (around line #11): 9 10 11 12 13 14 </thead> <tbody> <% @bookers.each do |booker| %> <tr> <td><%= booker.title %></td> <td><%= booker.body %></td>
該当のソースコード
モデルのファイル class Booker < ApplicationRecord validates :title, presence: true validates :body, presence: true end コントローラーのファイル def create booker = Booker.new(booker_params) if booker.save flash[:notice] = "Successfully create!" redirect_to booker_path(booker) else render :index end end 更新 コントローラーのファイル def index @bookers = Booker.all @booker = Booker.new end def create booker = Booker.new(booker_params) if booker.save flash[:notice] = "Successfully create!" redirect_to booker_path(booker) else booker_path end end ・モデルのファイルに変更はありません。
試したこと
試すことがよくわからないです。すいません。
でも他のサイトではActiveRecord::Baseを継承しているクラスでしたので、
僕も変えてみたのですが、できませんでした。サイトによってはApplecationRecordを継承してても良さそうでしたが、正直よくわかりません。バリデーション機能を実装していないと、空でも
普通に投稿はできます。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
以前に一度モデルを作ったのですが、名前をミスしてrails d model モデル名
としてモデルを消してmodelsフォルダの以前にあったファイルを消したら 赤い丸がつきました。
ちなみに、sublime textを使っていて、もしかしたらこれが原因なのかと思いました。
更新内容
・2つのカラムに内容を記述するときのみ保存できてて、どちらかが空欄の時、もしくは両方空欄の時にエラーができるので、バリデーションはできてるのかなと思いました。しかし、保存失敗した時にエラーが発生する状況です。
・そのエラー内容と関係のありそうなコードを「更新」と書いた下に書き足します。
回答1件
あなたの回答
tips
プレビュー