首先,我知道在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
}
答案 0 :(得分:2)
我的ConnectController #Adin尝试初始化
NotificationMailers.new_message()
但它必须是:
ContactMailer.new_message()
我不知道为什么我所遵循的教程会有错误的类名......但这就是问题所在。
谢谢大家。
答案 1 :(得分:1)
attr_accessor
,attr_writer
和attr_reader
都是vanilla核心Ruby的一部分,是Modules和类的辅助方法。
它们在Ruby 2.0中运行良好,因此您必须将它们标记在可疑列表中。