attr_accessor是否存在Rails 4中此联系表单的问题?

时间:2013-10-02 20:05:21

标签: ruby-on-rails actionmailer attr-accessor

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

2 个答案:

答案 0 :(得分:2)

我的ConnectController #Adin尝试初始化

NotificationMailers.new_message()

但它必须是:

ContactMailer.new_message()

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

谢谢大家。

答案 1 :(得分:1)

attr_accessorattr_writerattr_reader都是vanilla核心Ruby的一部分,是Modules和类的辅助方法。

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