我正在尝试创建一个非常基本的登录表单。它没有密码或用户名;只是用户名称的文本字段和提交按钮
这是代码:
<%= 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相匹配。但我不知道该怎么做,所以任何建议都会很棒。感谢
答案 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' }