2012-07-12 3 views
0

를 제출하고 내가 바보 같은 질문이 리디렉션 : 내 session_controller에서 을 내가가, 일치 '/ 로그인 절차'를이 노선에simple_form_for에 내가 루비 온 레일즈 멍청한 놈이야

def create 
    user = User.find_by_email(params[:email]) 
    if user && user.authenticate(params[:password]) 
     session[:user_id] = user.id 
     redirect_to root_path, :notice => "Logged in!" 
    else 
     flash.now.alert = "Invalid email or password" 
     render "new" 
    end 
    end 

이 '세션 #new 'new.html.haml에서

나는 "로그인"버튼을, 나는 그것이 어떻게 작동하는지 그 방법은 (호출됩니다 "생성"기대 누를 때 나는

= simple_form_for :session do |f| 
    = f.input :email 
    = f.input :password 
    = f.button :submit, 'Sign in!' 

이 내 사용자 모델),하지만 디버그 날 "새로운"방법과 나는 "authenticity_token"withot 채우기 이메일과 비밀 번호를 보여줍니다. 누군가가 나에게 무슨 소리를 들려 줄 수 있니? "new"메서드가 호출 된 다음 다른 메서드가 호출되는 것을 이해하지 못합니다.

답변

4

이 동작은 simple_form과 아무 관련이 없습니다. 액션을 호출하기위한 URL을 지정하지 않고 경로를 추론 할 모델을 전달하지 않으므로 빈 해시라는 url_for() 메서드로 끝납니다. 이 호출의 결과는 양식이 표시된 경로와 동일하지만 HTML 동사가 POST 인 현재 페이지입니다.

호출하려면 당신의 대신 sessions_path 당신의 new_session_path 다음과 같은 작업을 수행 할 수 있습니다

= simple_form_for :session, url: :sessions do |f| 

url_for를 통해 처리되고, 효과적으로 url: sessions_path를 지정하지만 밖으로 마술사를하고 동일합니다.

1

나는 erb를 사용하는 haml을 사용하지 않지만, 나는 비슷하게 작동한다고 생각합니다. ERB에서 양식 예를 들어 작업을 호출해야합니다 : 세션 컨트롤러의 작성 방법을 부를 것이다

form_for :session, :url => {:action => "create"} do |f| 

합니다. 그래서 나는이

을하는 데 도움이 HAML이

simple_form_for :session, :url => {:action => "create"} do |f| 

희망이 될 것 같아요

관련 문제