首先,我知道在 Rails 4 中不推荐使用 attr_accessible,但是 attr_accessor 呢?
当您点击提交时,它会返回“模板缺失”错误,但那是因为它在发送过程中的某处遇到错误,然后只是试图返回不作为物理页面存在的“connect#create”。
当我检查日志文件时,我在尝试发送联系表单时收到 500 内部服务器错误,我不确定在 Rails 4 中使用 attr_accessor 是否是罪魁祸首。有没有更新的方法来写这个?
class Message
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :email, :phone, :subject, :company, :title, :market, :body
validates :name, :email, :subject, :company, :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
以上是联系表单的消息模型:
它是否在发送数据的过程中?
联系邮件功能的其余代码是:
联系邮件
class ContactMailer< ActionMailer::Base
default :from => "noreply@test.com"
default :to => "{{MY EMAIL}}"
def new_message(message)
@message = message
mail(:subject => "Test Message")
end
end
在 /views/contact_mailer/ 中有一个 new_message.text.erb 文件:
Name: <%= @message.name %>
Email: <%= @message.email %>
Phone: <%= @message.phone %>
Subject: <%= @message.subject %>
Company: <%= @message.company %>
Title: <%= @message.title %>
Market: <%= @message.market %>
Body: <%= @message.body %>
我的路线是:
match 'connect' => 'connect#index', :as => 'connect', :via => :get
match 'connect' => 'connect#create', :as => 'connectpost', :via => :post
连接页面控制器:
class ConnectController < ApplicationController
def index
@message = Message.new
end
def create
@message = Message.new(params[:message])
if @message.valid?
NotificationsMailer.new_message(@message).deliver
redirect_to(connect_path, :notice => "Message was successfully sent.")
else
flash.now.alert = "Please fill all fields."
render :new
end
end
end
最后....../config/initializers/smtp_settings.rb 中的 SMTP 设置
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "{{SITE DOMAIN}}",
:user_name => "{{GMAIL EMAIL}}",
:password => "{{GMAIL EMAIL PASSWORD}}",
:authentication => "plain",
:enable_starttls_auto => true
}