0

首先,我知道在 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
}
4

2 回答 2

2

我的 ConnectController#Create 试图初始化

NotificationMailers.new_message()

但它必须是:

ContactMailer.new_message()

我不知道为什么我遵循的教程会有错误的类名......但这就是问题所在。

谢谢大家。

于 2013-10-03T15:24:11.090 回答
1

attr_accessorattr_writer并且attr_reader都是 vanilla 核心 Ruby 的一部分,并且是模块和类的辅助方法。

它们在 Ruby 2.0 中运行良好,因此您必须将它们从可疑列表中标记出来。

于 2013-10-02T20:14:15.937 回答