この基本的なお問い合わせフォームを正しく機能させるために、週末を通して深刻な問題が発生しました。
事実上、ユーザーがフォームに入力し、[送信]をクリックして、事前定義された電子メールアドレスにメッセージを直接送信できるようにする必要があります。
私が継続的に取得しているエラーは次のとおりです。
NoMethodError in Messages#new
Showing C:/Sites/jobapp_v2/app/views/messages/new.html.erb where line #1 raised:
undefined method `[]' for nil:NilClass
Extracted source (around line #1):
1: <%= form_for @message, :url => contact_path do |f| %>
2:
3: <div class="field">
4: <%= f.label :name %>
私は次の設定をしています:
メッセージコントローラー
class MessagesController < ApplicationController
def new
@user = current_user
@message = Message.new
end
def create
@message = Message.new(params[:message])
if @message.valid?
NotificationsMailer.new_message(@message).deliver
redirect_to(root_path, :notice => "Message was successfully sent.")
else
flash.now.alert = "Please fill all fields."
render :new
end
end
end
メッセージモデル
class Message < ActiveRecord::Base
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :email, :subject, :body
validates :name, :email, :subject, :body, :presence => true
validates :email, :format => { :with => %r{.+@.+\..+} }, :allow_blank => true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
Routes.rb
JobappV2::Application.routes.draw do
devise_for :users
resources :newsletters
match "contact" => "messages#new", :as => "contact", :via => :get
match "contact" => "messages#create", :as => "contact", :via => :post
get "pages/about"
get "pages/contact"
get "pages/terms"
resources :jobs
resources :users do
resources :jobs
end
root :to => 'jobs#index'
end
NotificationsMailer.rb
class NotificationsMailer < ActionMailer::Base
default :from => "advertise@artisanmag.co.uk"
default :to => "tom.pinchen@artisanmag.co.uk"
def new_message(message)
@message = message
mail(:subject => "Hello")
end
end
ビュー/notification_mailer/new_message.text.erb
Name: <%= @message.name %>
Email: <%= @message.email %>
Subject: <%= @message.subject %>
Body: <%= @message.body %>
ビュー/メッセージ/new.html.erb
<%= form_for @message, :url => contact_path do |f| %>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :email %>
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :subject %>
<%= f.text_field :subject %>
</div>
<div class="field">
<%= f.label :body %>
<%= f.text_area :body %>
</div>
<%= f.submit "Send" %>
<% end %>
私は本当にこの未定義のメソッドエラーの原因をまったく理解できないので、人々が提供できるどんな助けも本当にありがたいです!前もって感謝します :)