2013-10-16 2 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의 데이터베이스를 비교하는 것입니다. 그러나 나는 이것을하는 방법을 모른다. 그래서 어떤 충고도 위대 할 것이다. 감사합니다.

답변

1

name 매개 변수를 잘못 참조하기 때문에 nilUser.find 방법으로 전달 중입니다.

당신이 대신해야 할 것은 다음 중 하나입니다 :

User.find(params[:current_user]) 

또는

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

사용중인 코드 :

User.find(params[:name]) 

... params 해시에 다른 해시 calle이 포함되어있어 유효하지 않습니다. d current_user, 여기서 name 매개 변수가 나타나면 :

params[:current_user][:name] 
     \/   \/ 
'current_user' => { 'name' => 'John Doe' } 
관련 문제