Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么是utf8=✓&;真实性令牌以及为什么它会与邮件表单gem产生冲突?_Ruby On Rails_Ruby_Heroku_Utf 8_Mail Form - Fatal编程技术网

Ruby on rails 什么是utf8=✓&;真实性令牌以及为什么它会与邮件表单gem产生冲突?

Ruby on rails 什么是utf8=✓&;真实性令牌以及为什么它会与邮件表单gem产生冲突?,ruby-on-rails,ruby,heroku,utf-8,mail-form,Ruby On Rails,Ruby,Heroku,Utf 8,Mail Form,我正在使用mail_form gem和sendgrid作为我的电子邮件联系人表单。但是当我填写表单并发送消息时,它不会成功发送。通过发送消息,它应该将用户带到另一个页面,在该页面上显示感谢您的消息 我得到这个utf8=✓&我的url和heroku日志中的真实性令牌。我认为这就是造成这个问题的原因。你们能帮帮我吗 2016-01-10T17:49:47.934925+00:00 app[web.1]: Started GET "/contacts/new?utf8=%E2%9C%93&au

我正在使用mail_form gem和sendgrid作为我的电子邮件联系人表单。但是当我填写表单并发送消息时,它不会成功发送。通过发送消息,它应该将用户带到另一个页面,在该页面上显示感谢您的消息

我得到这个utf8=✓&我的url和heroku日志中的真实性令牌。我认为这就是造成这个问题的原因。你们能帮帮我吗

2016-01-10T17:49:47.934925+00:00 app[web.1]: Started GET "/contacts/new?utf8=%E2%9C%93&authenticity_token=mzcayVlHayBSxoka6pnUQdjz7OxaPlFICU7L%2FJlfZU4NmyiLypTSbcgaJ%2BRSLZdmhYW3NaxMrZoL0Khwr%2FiRfA%3D%3D&contact%5Bname%5D=Brandon+Espinoza&contact%5Bemail%5D=espinozabrand%40gmail.com&contact%5Bmessage%5D=Hi+how+are+you+msg+me+back+asap+pls&contact%5Bnickname%5D=&commit=Yes%21+Send+It%21" for 71.9.177.97 at 2016-01-10 17:49:47 +0000
2016-01-10T17:49:47.950056+00:00 app[web.1]: Completed 200 OK in 10ms (Views: 9.1ms | ActiveRecord: 0.0ms)
2016-01-10T17:49:47.939506+00:00 app[web.1]: Processing by ContactsController#new as HTML
2016-01-10T17:49:47.939670+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "authenticity_token"=>"mzcayVlHayBSxoka6pnUQdjz7OxaPlFICU7L/JlfZU4NmyiLypTSbcgaJ+RSLZdmhYW3NaxMrZoL0Khwr/iRfA==", "contact"=>{"name"=>"Brandon Espinoza", "email"=>"espinozabrand@gmail.com", "message"=>"Hi how are you msg me back asap pls", "nickname"=>""}, "commit"=>"Yes! Send It!"}
2016-01-10T17:49:47.947225+00:00 app[web.1]:   Rendered contacts/new.html.erb within layouts/application (6.0ms)
这是我的联系人_controller.rb:

class ContactsController < ApplicationController

  def new
    @contact = Contact.new
  end

  def create
    @contact = Contact.new(params[:contact])
    @contact.request = request
    if @contact.deliver
      flash.now[:error] = nil
    else
      flash.now[:error] = 'Cannot send message.'
      render :new
    end
  end

end
以下是我的路线:

Rails.application.routes.draw do

  resources :posts
  resources :projects
  resources :contacts, only: [:new, :create]
  get 'welcome/index'
  root 'welcome#index'
end

这应该回答您关于
utf8
authenticity\u token
字段的问题的第一部分:

:

这段代码没有显示在浏览器中,是Rails内部使用的,因此了解它的功能对我们来说并不重要。简单地说,它使用Unicode字符✓ (复选标记✓) 强制浏览器使用正确的字符编码提交数据,然后它包含一个真实性令牌,Rails使用该令牌阻止称为跨站点请求伪造(CSRF)的攻击

虽然我还没有使用这个gem,但是您可以启动一个控制台并在那里测试交付吗?这应该可以:

c = Contact.new
c.email = "your@email.com"
c.name = "Your Name"
c.message = "Test Subject"
c.deliver
更新:

您的日志没有显示任何错误。我想您有问题:

  • 邮件无法发送。 您在使用控制台时收到电子邮件了吗? 如果有,请检查从表单传递的参数。查看rails 4的强参数。提示:
  • 如果没有,请再次按照我的控制台示例中的步骤,查看所指出的
    c.errors

  • 用户在提交表单后不会收到“谢谢”。最简单的方法是将
    flash替换。现在[:error]=nil
    flash。现在[:notice]='Thankyou your message!'
    。如果您想要一个专用页面,您需要该页面、重定向和相应的路径

  • 我找到了这个问题的解决办法。以上两种方法都不能解决这个问题

    由于某些原因,引导中的表单标记正在创建冲突。因此,只需从引导中取出
    标记,表单就可以提交

    所以表单应该是这样的
    
    为什么不打个招呼
    “30”,:占位符=>“您的邮件”,:行=>“10”%>
    
    requestin
    @contact.request=request
    从哪里来?@spickermann来自邮件表单gem。这是该gem的文档。@mackenzie child你能帮我一下吗?这几乎肯定不是问题。你可以尝试检查@contact.error这会把网站搞砸吗?因为我只是为生产
    联系人设置电子邮件表单及其功能。新建
    将返回一个尚未保存到数据库的新联系人对象。我不知道
    deliver
    方法做什么,你能发布相关的代码吗?在任何情况下,你都可以在退出控制台时使用
    rails控制台--sandbox
    回滚对数据库的任何更改。如果一切顺利,将向指定的电子邮件发送一封电子邮件。MailForm::Notifier#联系人:254.3m处理出站邮件s发邮件到espinozab100@gmail.com(13.7毫秒)日期:2016年1月12日星期二13:53:40-0600从:布兰登到:espinozab100@gmail.com消息ID:主题:联系人表单Mime版本:1.0内容类型:text/html;charset=UTF-8内容传输编码:7bit联系人表单名称:Brandon电子邮件:espinozab100@gmail.com

    信息:受试者

    =>事实就是这样enedPlease请尝试更清楚地了解您尝试过的内容、正在发生的事情以及您的问题。请参阅我上面的编辑,以获取一些提示。
    config.action_mailer.default_url_options = { host: 'https://espinozabrandblog.herokuapp.com/' }
      config.action_mailer.delivery_method = :smtp
    
      ActionMailer::Base.smtp_settings = {
      :address        => 'smtp.sendgrid.net',
      :port           => '587',
      :authentication => :plain,
      :user_name      => ENV['SENDGRID_USERNAME'],
      :password       => ENV['SENDGRID_PASSWORD'],
      :domain         => 'heroku.com',
      :enable_starttls_auto => true
    }
    
    Rails.application.routes.draw do
    
      resources :posts
      resources :projects
      resources :contacts, only: [:new, :create]
      get 'welcome/index'
      root 'welcome#index'
    end
    
    c = Contact.new
    c.email = "your@email.com"
    c.name = "Your Name"
    c.message = "Test Subject"
    c.deliver
    
    <div class="container">
      <div class="row">
        <div class="col-md-12">
          <h3 class="page-titles">Why Not Say Hello</h3>
        </div>
      </div>
    
      <div class="row">
        <div class="col-md-6 center-block">
            <%= form_for @contact do |f| %>
              <div class="form-group">
                <%= f.label :name %>
                <%= f.text_field :name, required: true, class: "form-control"  %>
              </div>
    
              <div class="form-group">
                <%= f.label :email %>
                <%= f.email_field :email, required: true, class: "form-control" %>
              </div>
    
              <div class="form-group">
                <%= f.label :message %>
                <%= f.text_area :message, as: :text, class: "form-control", :cols => "30", :placeholder => "Your Message", :rows => "10" %>
              </div>
    
              <div class="form-group hidden">
                <%= f.label :nickname %>
                <%= f.text_field :nickname, hint: 'leave this field blank' %>
              </div>
    
              <%= f.submit 'Yes! Send It!', class: " btn-default btn sendbtn" %>
    
            <%end%>
        </div>
      </div>