2012-02-16 4 views
5

私のapplication.html.erbのヘッダにログイン(ユーザ名/パスワード)を含めることを試みています。私はこのエラーを取得しています:Rails 3が別のコントローラから部分的にレンダリングされました(エラー:ActionView :: MissingTemplate)

<%= render '/login' %> 

「/ログイン」として私のroutes.rbをで定義されています。私は私のapplication.html.erbでこのコールが作るとき

Missing partial /login with {:handlers=>[:rjs, :builder, :rhtml, :erb, :rxml], :locale=>[:en, :en], :formats=>[:html]} in view paths "/app/views" 

これが起こっています

match '/login' => "sessions#new", :as => "login" 

UPDATE:ここに私のセッションコントローラです:

class SessionsController < ApplicationController 

    def create 
    if user = User.authenticate(params[:email], params[:password]) 
     session[:user_id] = user.id 
     user.last_login = Time.now 
     user.save 
     redirect_to root_path, :notice => "login successful" 
     else 
     flash.now[:alert] = "invalid login/password combination " # don't show pass + params[:password] 
     #render :action => "new" 
     redirect_to login_path, :notice => "wrong user pass" 
     end 
    end 

    def destroy 
    reset_session 
     redirect_to root_path, :notice => "successfully logged out" 
    end 

end 

私はこれがコントローラのアクションで変数を定義していないことが原因である可能性がありますが、これはセッションであり、application.html.erb(application_controller.rb)にありますので、これを行う方法を確認してください。誰もこれを行う方法を知っていますか?ありがとう!

+0

あなたの部分は正確に位置していますか?そして、レンダリングで経路パスを割り当てるのはなぜですか? – prasvin

+0

部分はviews/sessions/new.html.erbにあります。私が '/ login'をレンダリングの呼び出しで使用している理由は、views/sessions/new.html.erbの部分をレンダリングすると考えたからです。 – botbot

+0

更新された回答を参照 – prasvin

答えて

9

<%= render "sessions/login", :@user => User.new %>

は、ビュー/セッション内のセッションの一部が表示ログイン、すなわち「_login.html.erb」をレンダリングし、それは次のように部分的に直接参照することができるように、新しいユーザーに@userをインスタンス化します:

form_for @user, :url => sessions_path do |f| 
    f.text_field :email 
+0

私のセッションは私のセッションコントローラコードを表示するように更新しました。私はこれで新しいことが分かったので、なぜ私が一緒に渡らなければならないのかわからない:@user => User.new?そうです: user = User.authenticate(params [:email]、params [:password]) はセッションコントローラで失敗しませんか?私は/セッションフォルダにnew.html.erbを追加しなければならなかったチュートリアルに従っていましたが、今では私のコントローラを見ているだけで、createとdetroyメソッドしかありません。ちょっと混乱している。 – botbot

+0

これで認証システムを作成しようとしている場合は、Devise gem https://github.com/plataformatec/deviseを使用することをお勧めします。その超簡単で非常に非常に有用です。それは、セッションを単独で作成し、有用なヘルパー(current_userなど)を提供し、セッションの面倒を管理することができます。私はむしろ認証部分をDeviseに任せます。こうすることで、ユーザーが認証されていない場合、Deviseはそのユーザーをサインインページにリダイレクトします。これで、サインインページをデザインして、必要に応じてログイン(ユーザ名/パスワード)をレンダリングできます。 – prasvin

+1

今、あなたの質問にまっすぐに進み、views/sessionsに部分的な '_login.html.erb'を作成することをお勧めします。次に、上記のようにログイン・パーシャルをレンダリングします。 '@ user'が渡されるのは、partialが' @ user'のためのフォームを持っているからです。そのため、 'User.new'でインスタンス化されています。 上記のように、電子メール、パスワード、および必要に応じて他のフィールドを含む、ユーザーのフォームにpartialを入力します。フォームが送信されると、フォームに指定されたurlのセッション#create becozにパラメータが渡されます。コードはテストされていませんが、助けてください。 しかし、最初にDeviseを見て、それがur要件を満たす場合は使用してください。 – prasvin

0

私の場合ファイルの拡張子でファイルの拡張子を確認してくださいは、RHTMLだった、私はhtml.erbにそれを変更しました。

今すぐ動作します。

注:RHTML拡張子の付いたこのファイルは、レール< = 3.0.10に罰金働いていた

。しかし、のレール3.1.12で作業を停止しました。そこで、私は上記のように拡張を変更しました。

関連する問題