Ruby on rails Action mailer开发环境Rails 3

Ruby on rails Action mailer开发环境Rails 3,ruby-on-rails,ruby,ruby-on-rails-3,actionmailer,Ruby On Rails,Ruby,Ruby On Rails 3,Actionmailer,所以,在开发模式下设置邮件程序时,我似乎总是遇到问题,我看不到我的设置有任何问题,也许其他人可以看到?当我通过联系人表单发送电子邮件时,没有重定向,电子邮件的参数通过url传递,相同的页面被呈现 http://localhost:3000/contact?utf8=%E2%9C%93&authenticity_token=123456exampletoken%3D&message%5Bname%5D=richard+lewis&message%5Bemail%5D=ric

所以,在开发模式下设置邮件程序时,我似乎总是遇到问题,我看不到我的设置有任何问题,也许其他人可以看到?当我通过联系人表单发送电子邮件时,没有重定向,电子邮件的参数通过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"
}
  <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-->
我有一个联系人控制器

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
最后是我的路线

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

好吧,尽管有下面的建议,但我无法发布我的表单,它一直呈现get请求,我的表单看起来是这样的

 #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"
}
  <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-->

联系方式::方法=>:post do | f |%>
在动物或动物身上分离,或在动物身上分离。除偶尔吸烟外,不得在动物体内吸烟。所有的劳动都是从普通消费者那里获得的。如果你不同意,我就不同意。圣岛例外

“联系人姓名”:占位符=>“姓名”%>

“联系人电子邮件”:占位符=>“电子邮件”%>

“联系人url”,:占位符=>“网站”%>

“联系人消息”,:行=>6,:占位符=>'消息'%>

'提交联系人'%>

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

改变这个

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

联系方式::方法=>:post do | f |%>
对此

  <%= form_for @message, :url => contact_path, :method => :post, :html => {:id => 'contact-form' } do |f| %> 
contact_path,:method=>:post,:html=>{:id=>'contact form'}do | f |%>
并删除最后一个
。因为helper的表单_将添加它作为块的一部分。这将删除嵌套表单,并应允许您发布/发送邮件。

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

改变这个

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

联系方式::方法=>:post do | f |%>
对此

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

并删除最后一个
。因为helper的表单_将添加它作为块的一部分。这将删除嵌套表单,并允许您发布/发送邮件。

您可以接收邮件吗?请在服务器上查看。能否在config/routes.rb中写入“resources:contact”。默认情况下,rails将处理该请求。请删除当前在ur config/routes.rb中添加的行,但我无法找到操作索引,我是否应该只使用[:new,:create]您可以接收邮件?请在服务器上查看。你能在config/routes.rb中写下“resources:contact”吗?默认情况下,rails将处理请求。请删除当前在ur config/routes.rb中添加的行。我尝试过这一点,但是我找不到操作索引,我是否应该只使用[:new,:create]谢谢,所以我在我的表单contact\u path中得到了它,:method=>'post'do | f |%>,尽管我已更改了valid以另存为另一个答案,但仍然无法工作。我是否会更改为valid?因为它不是数据库支持的,所以不需要持久化它。您还可以添加记录器语句以查看它的去向。当您现在提交时,您不应该让URL中的参数再次查看您的代码,我没有看到任何验证(除非您没有发布它们),因此您可以尝试发送消息。另一个选项是包含一个flash。现在在else上显示一条错误消息,表明它没有被发送。我还没有进行任何验证,只是希望现在发送的东西,我会尝试flashnow@maximusvalid只是通过验证运行,与持久化记录无关。持久化对象将导致它运行验证,如果有效,则失败?返回false。新对象上不会有任何错误,因为验证尚未运行,但一旦调用#valid?如果存在错误,则将填充错误。看到了,谢谢,所以我在我的表单contact_path中得到了这个:method=>'post'do | f |%>,但是仍然不起作用,尽管我已经更改了valid以另存为另一个答案specifiedI将更改回valid?因为它不是数据库支持的,所以不需要持久化它。您还可以添加记录器语句以查看它的去向。当您现在提交时,您不应该让URL中的参数再次查看您的代码,我没有看到任何验证(除非您没有发布它们),因此您可以尝试发送消息。另一个选项是包含一个flash。现在在else上显示一条错误消息,表明它没有被发送。我还没有进行任何验证,只是希望现在发送的东西,我会尝试flashnow@maximusvalid只是通过验证运行,与持久化记录无关。持久化对象将导致它运行验证,如果有效,则失败?返回false。新对象上不会有任何错误,因为验证尚未运行,但一旦调用#valid?如果存在错误,则将填充错误。看见