为什么我的登录表单不起作用?

时间:2013-10-16 18:47:17

标签: ruby-on-rails

我正在尝试创建一个非常基本的登录表单。它没有密码或用户名;只是用户名称的文本字段和提交按钮

这是代码:

<%= form_for :current_user, url: { :controller => 'sessions', :action=>'new' } do |f| %>
<p id='name'>Name:<%= f.text_field :current_user, placeholder: 'First Last', :id => 'current_user' %></p>
<%= f.submit 'Submit', :class => 'btn btn-primary' %>

当我提交名称时,rails会给我这个错误

ActiveRecord::RecordNotFound in SessionsController#new
Couldn't find User without an ID

但它收到正确的参数,因为它包含

"current_user"=>{"name"=>"John Doe"}

这是我希望它接收的内容,但我遇到的问题是正确定义将current_user实际设置为John Doe的操作。

所以这就是我在控制器中的内容

class SessionsController < ApplicationController

def new
  @current_user = User.find(params[:name])
  redirect_to '/calendar'
end

end

我想要它做的就是将变量@current_user设置为名为John Doe的数据库中的用户。所以我需要做的是将提交的名字John Doe与数据库中的John Doe相匹配。但我不知道该怎么做,所以任何建议都会很棒。感谢

1 个答案:

答案 0 :(得分:1)

您正在将nil传递给User.find方法,因为您错误地引用了name参数。

您需要做的是以下任何一种:

User.find(params[:current_user])

User.find_by_name(params[:current_user][:name])

您正在使用的代码:

User.find(params[:name])

...无效,因为params哈希包含另一个名为current_user的哈希,其中出现name参数,因此:

params[:current_user][:name]
         \/            \/
'current_user' => { 'name' => 'John Doe' }