2012-02-04 4 views
2

면책 조항 : 레일에 초보자 용 내가 양식을 만들려고 해요, 어쨌든 3.2레일 콘트롤러 파라미터는 디버그 출력에서 ​​볼 수는 있지만 null입니다.

를 레일을 사용하고 상인이 로그인하는 나는 로그인의 양식 입력을 기반으로 새로운 세션을 만들려고 MerchantSessionsController 있습니다.

이 무엇을이다 내 응용 프로그램/뷰/merchant_sessions/new.html.erb에있는

<%= form_for(:merchant_session, :url => merchant_sessions_path) do |f| %> 
    <div class="field"> 
    <%= f.label :userName %><br /> 
    <%= f.text_field :userName %> 
    </div> 
    <div class="field"> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %> 
    </div> 
    <div class="actions"> 
    <%= f.submit "Sign in" %> 
    </div> 
<% end %> 

파일 응용 프로그램 \ 컨트롤러 \ merchant_sessions_controller.rb에는 다음이 포함

def create 
    merchant = Merchant.find_by_userName(params[:userName]) 

    if merchant && merchant.authenticate(params[:password]) 
     merchant_session[:merchant_id] = merchant.id 
     redirect_to root_url, :notice => "Merchanthas been logged in" 
    else 
     flash.now[:error] = "Invalid username or password." 
     @title = "Merchant Signin" 
     render "new" 
    end 
end 

불행히도 가맹점 로그인 페이지의 디버그 출력에서 ​​사용자 이름과 비밀번호가 확실히 전달되는 것을 볼 수 있지만 params [: userName] 및 params [: password]는 계속 전달되지 않습니다.

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess 
utf8: ✓ 
authenticity_token: 8WsOviJyY1kktPq9dDO+OFePdSKf2uGLY3Pnc4bU2tc= 
merchant_session: !ruby/hash:ActiveSupport::HashWithIndifferentAccess 
    userName: asd 
    password: ddsad 
commit: Sign in 
action: create 
controller: merchant_sessions 

params [: action] 매개 변수에도 액세스하려고 시도했지만 정상적으로 작동했습니다. userName 및 password 매개 변수가 nil 인 이유는 무엇입니까? MerchantSessionsController (이전의 SessionsController)의 이름을 변경했으나 문제가 될 것이라고 생각하지 않습니다.

답변

4

사용자 이름과 암호가 잘못된 곳에서 찾고 있습니다. YAML의 특정 구조에 유의하십시오. 덤프 :

merchant_session: !ruby/hash:ActiveSupport::HashWithIndifferentAccess 
    userName: asd 
    password: ddsad 

과 양식을 :

<%= form_for(:merchant_session, :url => merchant_sessions_path) do |f| %> 
당신은 params[:merchant_session][:userName]보고 싶지

대신 params[:userName]params[:password]params[:merchant_session][:password] :

def create 
    mparams = params[:merchant_session] 
    merchant = Merchant.find_by_userName(mparams[:userName]) 

    if merchant && merchant.authenticate(mparams[:password]) 
     #... 
+0

답변을 게시하기 전에 약 1 분을 알아 냈습니다. 아, 한 프레임 워크에 대해 많은 것을 알 수 있지만 다른 프레임 워크에서 멍청한 실수를 저 지르지 못하는 것이 놀랍지 않습니까? – you786

+0

@ yaj786 : 얼굴에서 당신을 응시하는 것이 너무 어렵다는 것이 놀랍습니다. 그것들은 가장 까다로운 버그 중 일부입니다. –

관련 문제