2011-09-04 5 views
1

레일을 시작하기 때문에 이것은 매우 기본적인 질문입니다.Rails3 : 다른 컨트롤러에서 렌더링

보기/홈/index.html.haml :

%p 
    This is the home page...! 

- if current_user 
- else 
    = render :template => 'user_sessions/new' 


user_sessions_controller :

class UserSessionsController < ApplicationController 
    before_filter :require_no_user, :only => [:new, :create] 
    before_filter :require_user, :only => :destroy 

    def new 
    @user_session = UserSession.new 
    end 

    def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
     flash[:notice] = "Login successful!" 
     redirect_back_or_default user_controls_url 
    else 
     render :action => :new 
    end 
    end 

    def destroy 
    current_user_session.destroy 
    flash[:notice] = "Logout successful!" 
    redirect_back_or_default home_url 
    end 
end 
이 코드를 사용하여 홈페이지에서 로그인 폼 (authlogic)을 렌더링하기 위해 노력하고 있어요


보기/user_sessions/new.html.haml

= form_for @user_session, :url => {:action => "create"} do |f| 
    = f.error_messages 
    %div 
    = f.label :login 
    = f.text_field :login 
    %div 
    = f.label :password 
    = f.password_field :password 
    %div 
    = f.check_box :remember_me 
    = f.label :remember_me 
    %div 
    = f.submit "Login" 

ActionView::Template::Error (undefined method `model_name' for NilClass:Class): 
1: = form_for @user_session, :url => {:action => "create"} do |f| 
2: = f.error_messages 
3: %div 
4:  = f.label :login 
    app/views/user_sessions/new.html.haml:1:in `_app_views_user_sessions_new_html_haml___182031841_97682750' 
    app/views/home/index.html.haml:6:in `_app_views_home_index_html_haml__679857083_97787190' 

는 무슨 내가 잘못을하고있는 중이 야, 나는 그것을 어떻게 해결합니까 : 나는 홈페이지를 방문 할 때 17,451,515,


모델/user_session.rb

class UserSession < Authlogic::Session::Base 

    def to_key 
    new_record? ? nil : [ self.send(self.class.primary_key) ] 
    end 

    httponly true 
    secure true 
end 


, 나는거야?

도움을 주셔서 감사합니다.

답변

2

코드에서 에 연결된 new 작업을 방문하면 @user_session이 생성됩니다. index 조치를 수행하면 생성되지 않습니다.

index 작업에서 user_sessions/new 템플릿을 렌더링하면 ERB/​​HAML에서 @user_session의 인스턴스를 찾고 오류가 발생하므로 오류가 발생합니다. 그것을 할 대신 index 행동에서 그것을 유지하기 위해 더 좋을 거라 불구하고, index 행동 자체에 당신은 또한 그것을 할 수 있습니다,

#Note: The <%%> is ERB code (please adjust it for the syntax used in HAML) 
<% @user_session = UserSession.new if @user_session.nil? %> 

= form_for @user_session, :url => {:action => "create"} do |f| 
... 

을 또는 :

그래서, 당신은 다음과 같이 @user_session를 인스턴스화 할 수 (예를 들어 템플릿을 다른 작업에서도 렌더링하고 싶다면 코드를 불필요하게 복사 할 것입니다.)

+0

나는 분명히 뭔가 잘못하고 있습니다. 이제 작동합니다! 고마워요 !! – suruen

관련 문제