Railsを勉強中です。現在、フォームの作成で入力画面を作成しています。
submitボタンを押した時に以下のエラーが出てしまいます。
NoMethodError in ContactController#create undefined method `save' for nil:NilClass
フォームを入力した状態と空の状態、どちらもこのエラーが出てしまいます。
前回質問した際と同じ(https://teratail.com/questions/95645)モジュール問題なのかなと思っているのですが、モジュールについてよくわかっていません。
Railsの予約語のように同じ単語が重複してはならないようなもの何でしょうか?
よくわかりませんが、わかりやすく教えていただけると幸いです。
contact_contoller.rb
class ContactController < ApplicationController def index @msg = "メッセージだよ" @contact = Contactkun.new end def create if @contact.save(new_params) @msg = "送信完了" else @msg = "エラー" end end private def new_params params.require(:contactkun).permit(:name, :content) end end
contactkun.rb
class Contactkun < ApplicationRecord # フォームのバリデーション validates :name, presence: true validates :contact, presence: true end
index.html.erb
<p><%= @msg %></p> <%= form_for(@contact, url:{controller:'contact', action:'create'}) do |f| %> <% if @contact.errors.any? %> <% @contact.errors.full_messages.each do |message| %> <p><%= message %></p> <% end %> <% end %> <table> <tr><td>名前</td><td><%= f.text_field :name %></td></tr> <tr><td>内容</td><td><%= f.text_area :content %></td></tr> <tr><td></td><td><%= f.submit "問い合わせる" %></td></tr> </table> <% end %>
###追記1 2017/10/24 3:27
plaさん
ご回答ありがとうございます。
ご指摘の通りに記述したのですが、index.html.erbでエラーが発生しました。
ArgumentError in Contact#index First argument in form cannot contain nil or be empty <%= form_for(@contact, url:{controller:'contact', action:'create'}) do |f| %>
あと気になったのが、インスタンス変数(@contact)の宣言についてなんですが、
createアクションに @contact
が宣言されていないということは、indexアクションに宣言されていても、他のアクション内からは参照できないということなんでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/24 05:44
2017/10/25 02:18