2013-07-17 26 views
0

因此,似乎我在开发模式下设置邮件程序时总是遇到问题,我无法看到设置有任何问题,也许其他人可以看到某些内容?在那一刻,我通过我的联系形式发送电子邮件没有重定向和电子邮件的PARAMS通过URL获得通过,并在同一页面获取呈现动作邮件程序开发环境轨迹3

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: "[email protected]" 

def send_mail(message) 
    @message = message 
    mail(to: "[email protected]", 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 

UPDATE

好了,所以尽管下面我建议,不能让我的形式发布,它可以EPS渲染GET请求,我的形式看起来像这样

<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--> 
+1

你能收到邮件吗? 只是在服务器上看到。 –

+1

您可以在config/routes.rb.中设置'resources:contact',默认导轨将处理请求。请删除当前添加的行在我们的配置/ routes.rb – Amit

+0

尝试,但后来我找不到动作索引,我应该只使用[:new,:create] – Richlewis

回答

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助手会将其作为块的一部分添加。这将删除嵌套表单,并且允许您发布/发送邮件。

+0

谢谢,所以我得到了这个以我的形式<%= form_for @message,:url => contact_path,:method =>'post'do | f | %>,但仍然没有工作,虽然我已更改有效保存为另一个指定 – Richlewis

+0

+1,表格需要发送确认。 –

+0

我会改回有效?由于它不是数据库备份的,所以你不需要保存它。您还可以添加记录器语句以查看它的去向。当你现在提交时,你不应该再次看到你的代码中的url – Doon