2013-10-16 87 views
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' %> 

當我提交的名稱導軌給了我這個錯誤

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

由於您錯誤地引用了name參數,因此您將nil傳遞給User.find方法。

你需要做的,而不是什麼下列操作之一是:

User.find(params[:current_user]) 

OR

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

您正在使用的代碼:

User.find(params[:name]) 

...無效,因爲params散列值包含另一個散列值d current_user,其中name參數出現,因此:

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