2013-10-02 2 views
0

Во-первых, я знаю, что attr_accessible устарел в Rails 4, но как насчет attr_accessor?Проблема с attr_accessor в этой форме контакта в Rails 4?

Когда вы нажимаете submit, он возвращает ошибку «Template is Missing», но это потому, что он попадает в ошибку где-то в процессе передачи, а затем пытается вернуть «connect # create», который не существует как физическая страница.

Когда я проверяю файлы журнала, я получаю ошибку внутреннего внутреннего сервера при попытке отправить контактную форму, и я не уверен, что использование attr_accessor в Rails 4 является виновником. Есть ли новый способ написать это?

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{[email protected]+\..+} }, :allow_blank => true 

    def initialize(attributes = {}) 
    attributes.each do |name, value| 
     send("#{name}=", value) 
    end 
    end 

    def persisted? 
    false 
    end 

end 

Выше модель сообщение для контактной формы:

ли что-то в процессе отправки данных?

Остальная часть кода функциональности контакт почта:

Контакт Mailer

class ContactMailer< ActionMailer::Base 

    default :from => "[email protected]" 
    default :to => "{{MY EMAIL}}" 

    def new_message(message) 
    @message = message 
    mail(:subject => "Test Message") 
    end 

end 

В/просмотров/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 

И, наконец .... настройки SMTP в /config/initializers/smtp_settings.rb

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

Это не attr_accessor - я готов поспорить, что это ваша почтальон. Прокомментировать строку в ConnectController # создать, где вы отправляете почту, а затем повторить попытку? Если это так, проблема может быть связана с вашими проверками – bodacious

ответ

2

Мои ConnectController # НАПИСАТЬ пытается инициализировать

NotificationMailers.new_message() 

Но это должно было быть:

ContactMailer.new_message() 

Я понятия не имею, почему учебник я следовал бы иметь неправильное имя класса там .. но это было проблемой.

Спасибо всем.

1

attr_accessor, attr_writer и attr_reader являются частью ванильный корень Ruby и являются вспомогательными методами для Modules и классов.

Они отлично работают в Ruby 2.0, поэтому вам придется отметить их в списке подозреваемых.

Смежные вопросы