我尝试允许用户直接从我的主页/目标网页输入电子邮件和密码。为此,我遵循了这个例子:
http://pupeno.com/2010/08/29/show-a-devise-log-in-form-in-another-page/
所以我把表单放在我的index.html.erb中并创建了一个welcome_helper.rb,就像文章中所说的那样,因为我的欢迎控制器控制了索引视图的主页。
但是发生的事情是,在点击注册后没有创建/保存用户我在控制台中看到了这一点:
Started GET "/?utf8=%E2%9C%93&authenticity_token=mM52EgyczA4XgutnP37Q3rumj3HuHx8nYNRz5pas6lM%3D&user%5Bemail%5D=alex%2Bneun%40rivalfox.com&user%5Bpassword%5D=[FILTERED]&user%5Bremember_me%5D=0&commit=Sign+in" for 127.0.0.1 at 2014-01-21 14:24:21 +0100
Processing by WelcomeController#index as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"mM52EgyczA4XgutnP37Q3rumj3HuHx8nYNRz5pas6lM=", "user"=>{"email"=>"email@email.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
Rendered welcome/index.html.erb within layouts/application (3.1ms)
Completed 200 OK in 7ms (Views: 6.7ms | ActiveRecord: 0.0ms)
似乎它是一个GET请求,但我不明白为什么,因为路径与正常的Devise Sign Up页面上使用的路径相同。
我有什么想法可以解决这个问题。在我发布的文章中,有人要求提出相同的问题,但没有答案。也无法在网上找到任何东西。
我的index.html.erb看起来像这样:
<div class="col-lg-2 col-md-3 form-container">
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do
|f| %>
<%= devise_error_messages! %>
<div><%= f.label :email %><br />
<%= f.email_field :email, :autofocus => true %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<div><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></div>
<div><%= f.submit "Sign up" %></div>
<% end %>
<%= render "devise/shared/links" %>
</div>
答案 0 :(得分:0)
我认为您的:url => registration_path(resource_name)
实际上并未指向您的创建操作。
这可能不是最漂亮的解决方案,但请尝试用以下方法替换表单的第一部分:
<%= form_for(resource, :as => resource_name, :url => url_for(:controller => 'resource_controller', :action => 'create_action'), :method => :post) do |f| %>
确保填写正确的控制器和操作名称。
如果这样做有效,您知道这是您网址的问题,那么您可以对现有的网址进行排查:网址选择以查看相应网址的位置(或保留上述解决方案)。