0

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

这是它的代码:

<%= 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 进行匹配。但我不知道该怎么做,所以任何建议都会很棒。谢谢

4

1 回答 1

1

您将 a 传递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' }
于 2013-10-16T18:51:38.917 回答