サイトに問い合わせのフォームを作ろうとしてます。
rails sで確認しようとしたらNoMethodError と出ます。
rails cで@contact.saveを試しましたが
falseと出て保存されません。
エラーの解決方法を教えていただきたいです。
Showing /Users/username/projects/rails_test/app/views/contacts/new.html.erb where line #4 raised: undefined method `contacts_path' for #<#<Class:0x00007fef2a3f9280>:0x00007fef2c08aa98> Did you mean? contacts_new_path
以下コードです。
new.html.erb
<p>Find me in app/views/contacts/new.html.erb</p> <%= form_for @contact do |f| %> __ ⇦ここでエラー__ <div class="form-group"> <%= f.label :email, '返信先メールアドレス' %> <%= f.text_field :email, class: 'form-control' %> </div> <div class="form-group"> <%= f.label :message, 'お問い合わせ内容' %> <%= f.text_area :message, size: '10x10', class: 'form-control' %> </div> <%= f.submit '送信' %> <% end %>
contact_controller.rb
class ContactsController < ApplicationController def new @contact = Contact.new end def create @contact = Contact.new(contact_params) if @contact.save ContactMailer.contact_mail(@contact).deliver flash[:success] = 'お問い合わせを受け付けました' redirect_to root_path else render :new end end private def contact_params params.require(:contact).permit(:email, :message) end end
ご指摘後の変更点
form_forからform_withに変更
rails c →「@contact=Contact.new(email:"address",message:"aaaaaaa")」
@contact.saveで保存。
エラー内容が変わり、「ArgumentError」になりました。
ArgumentError in Contacts#new Showing /Users/name/projects/rails_test/app/views/contacts/new.html.erb where line #4 raised: wrong number of arguments (given 1, expected 0) Extracted source (around line #4): <p>Find me in app/views/contacts/new.html.erb</p> <%= form_with @contact do |f| %> ⇦ここでエラー <div class="form-group"> <%= f.label :email, '返信先メールアドレス' %>
NoMethodError の全文がないと正確な特定ができないです。
>>rails cで@contact.saveを試しましたがfalseと出て保存されません。
なんらかのバリデーションエラーかと思います。
@contact.errors.messages
でsaveできない原因がわかるかと思います。
ありがとうございます。
```
irb(main):007:0> @contact.errors.messages
=> {:email=>["can't be blank", "is invalid"]}
```
この様に出ました。
Contactモデルに下記のようなバリデーションを書いていませんか?
@contact.saveでemailを指定していないのが原因かと。
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX }
バリテーション下記のもの書いてます。ありがとうございます。
エラーがルートに関する記述となっているのでソースを提示していただくとより回答がつきやすいかと思います。
ありがとうございます
回答1件
あなたの回答
tips
プレビュー