0

所以似乎我在开发模式下设置邮件程序时总是遇到问题,我看不出我的设置有什么问题,也许其他人可以看到一些东西?在我通过联系表单发送电子邮件的那一刻,没有重定向,电子邮件的参数通过 url 传递,并且呈现相同的页面

http://localhost:3000/contact?utf8=%E2%9C%93&authenticity_token=123456exampletoken%3D&message%5Bname%5D=richard+lewis&message%5Bemail%5D=richlewis14%40gmail.com&message%5Bwebsite%5D=bbc.co.uk&message%5Bmessage%5D=test%0D%0A&commit=Send+Message

好的,所以我的开发环境看起来像这样

 #Mailer Config
 config.action_mailer.raise_delivery_errors = true
 config.action_mailer.perform_deliveries = true
 config.action_mailer.default_url_options = { host: "localhost:3000" }


 config.action_mailer.delivery_method = :smtp
 config.action_mailer.smtp_settings = {
 address: "smtp.gmail.com",
 port: 587,
 domain: "gmail.com",
 authentication: "plain",
 enable_starttls_auto: true,
 user_name: "myusername",
 password: "mypassword"
}

我有一个联系人控制器

class ContactController < ApplicationController

  def new
    @message = Message.new
  end

  def create
  @message = Message.new(params[:message])
   if @message.valid?
    ContactMailer.send_mail(@message).deliver
    redirect_to(root_path, :notice => "Thanks for your message, I will be in touch soon")
       else
        render :new
      end
    end
  end

梅勒

class ContactMailer < ActionMailer::Base
 default from: "richlewis14@gmail.com"

 def send_mail(message)
  @message = message
  mail(to: "richlewis14@gmail.com", subject: "Message From Blog Site")
 end
end

邮件文本文件

<p> You have a new Email</p>

<p><%= @contact.name %></p>
<p><%= @contact.email %></p>
<p><%= @contact.website %></p>
<p><%= @contact.message %></p>

消息模型

class Message
 include ActiveModel::Validations
 include ActiveModel::Conversion
 extend ActiveModel::Naming

 attr_accessor :name, :email, :website, :message


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

def persisted?
 false
end
end

最后是我的路线

 #CONTACT FORM
 match 'contact' => 'contact#new', :as => 'contact', :via => :get   
 match 'contact' => 'contact#create', :as => 'contact', :via => :post

更新

好的,尽管有以下建议,但我无法发布我的表单,它不断呈现获取请求,我的表单看起来像这样

  <div id="contact-form-wrap">
    <form id="contact-form">
     <%= form_for @message, :url => contact_path, :method => :post do |f| %>

      <span class="c-note">Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in anim id est laborum. Allamco laboris nisi ut aliquip ex ea commodo consequat. Aser velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint</span>

    <div class="contact-left">
     <p class="input-block clearfix">
      <%= f.text_field :name, :id => 'contact_name', :placeholder => 'Name' %>
     </p>

    <p class="input-block">
     <%= f.text_field :email, :id => 'contact_email', :placeholder => 'Email' %>
   </p>

    <p class="input-block last">  
     <%= f.text_field :website, :id => 'contact_url', :placeholder => 'Website' %> 
    </p>
  </div><!--end:contact-left-->


 <div class="contact-right">
  <p class="textarea-block">  
  <%= f.text_area :message, :id => 'contact_message', :rows => 6, :placeholder => 'Message' %>                    
  </p>
</div><!--end:contact-right-->

<div class="clear"></div>                            
  <p class="contact-button clearfix">   
    <%= f.submit 'Send Message', :id => 'submit-contact' %>                 
  </p>
  <div class="clear"></div>   
  <% end %>                     
</form>


 </div><!--contact-form-wrap-->
4

1 回答 1

3

看来您的表单(未显示)正在使用 GET 方法,并且与发布的创建路由不匹配。尝试更改视图中的表单以使用 POST。这应该调用 create 方法。查看您的日志,我猜它正在执行新方法

改变这个。

 <form id="contact-form">
      <%= form_for @message, :url => contact_path, :method => :post do |f| %>

对此

  <%= form_for @message, :url => contact_path, :method => :post, :html => {:id => 'contact-form' } do |f| %> 

并删除最后一个</form>。因为 form_for 助手会将其添加为块的一部分。这将删除嵌套表单,并且应该允许您发布/发送邮件。

于 2013-07-17T11:11:08.440 回答