【问题标题】:Devise gives me an 'email cannot be blank' error even though email is not blank即使电子邮件不是空白的,Devise 也会给我一个“电子邮件不能为空白”的错误
【发布时间】:2012-06-10 02:22:18
【问题描述】:

我在 Devise 注册用户时做了两件事。

  1. Two step confirmation - 用户首先需要输入他们的电子邮件地址。
  2. 我已将注册/新表单移至我的 welcome#index 视图。

即使我正确输入了电子邮件地址,并且我看到它包含在日志中的 params 哈希中:

Started POST "/users" for 127.0.0.1 at 2012-06-05 20:35:43 -0500
Processing by Devise::RegistrationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"0qWg/RxG+XyDqdsdadww=", "email"=>"abc@test.com", "commit"=>"Sign Me Up!"}
   (0.1ms)  begin transaction
  User Exists (0.2ms)  SELECT 1 FROM "users" WHERE LOWER("users"."email") = LOWER('') LIMIT 1
   (0.1ms)  rollback transaction
  Rendered devise/registrations/new.html.erb within layouts/application (9.2ms)
Completed 200 OK in 65ms (Views: 54.9ms | ActiveRecord: 0.0ms)

这是我得到的错误:

1 error prohibited this user from being saved:
Email can't be blank

我的初始注册表如下所示:

<%= form_for(resource, :as => resource_name, :class => "send-with-ajax", :url => user_registration_path(resource)) do |f| %>
            <%= devise_error_messages! %>
              <%= f.email_field :email, :name => :email, :id => "form-email", :placeholder => "your-email@address.com", :input_html => {:autofocus => true} %>
              <%= f.submit :label => "Submit", :value => "Sign Me Up!"  %>
          <% end %>

谢谢。

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    可能的解释:

    您的电子邮件字段在params 散列中为params[:email],而您在控制器中的创建操作可能期望它在params[:resource][:email] 中。当您删除 :name =&gt; :email 分配时,电子邮件将移回 params[:resource][:email]

    您已发布此哈希:

    Parameters: {"utf8"=>"✓", "authenticity_token"=>"0qWg/RxG+XyDqdsdadww=", "email"=>"abc@test.com", "commit"=>"Sign Me Up!"}
    

    你能看出它在工作时的外观有什么不同吗?

    【讨论】:

    • 你完全正确! Parameters: {"utf8"=&gt;"✓", "authenticity_token"=&gt;"0qWg/RxG+Xkjhgjsdsxaxcu/RL1yuBgtiVN1fw=", "user"=&gt;{"email"=&gt;"abc@test.com"}, "commit"=&gt;"Sign Me Up!"}
    【解决方案2】:

    我刚刚想通了,似乎我的电子邮件字段表单助手中的 :name 属性导致了问题。

    这是原始字段:

    <%= f.email_field :email, :name => :email, :id => "form-email", :placeholder => "your-email@address.com", :input_html => {:autofocus => true} %>
    

    我改成:

    <%= f.email_field :email, :id => "form-email", :placeholder => "your-email@address.com", :input_html => {:autofocus => true} %>
    

    这解决了它,但我不知道为什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多