2016-09-14 9 views
1

コントローラをインスタンス変数にアクセスすることができません:Railsの - ビューに

def store 
    if params[:name].present? && params[:pass].present? && params[:cpass].present? && params[:role].present? 
    @name = params[:name].downcase 

    if CheckEmpName(@name) == 0  
     render "userexist" 
     return 
    end 

    pass = params[:pass] 
    cpass = params[:cpass] 

    if pass != cpass     
     render "passerror" 
     return 
    end 

    role = params[:role] 

    @user = Employee.new(name: @name, password: pass, role: role) 
    @user.save 

    end 
    render "success" 
end 

上記のアクションは、すべてのユーザ入力が有効である「success.html.erb」ページをレンダリングします。代わりに、ユーザ名が既に登録されている場合は、 またはパスワードと確認パスワードの両方が一致しない場合は、適切なエラーファイル "userexist.html.erb"または "passerror.html.erb"がレンダリングされます。

問題:

私はsuccess.html.erbファイルに@nameインスタンス変数にアクセスすることができています。しかし、私は両方のエラー htmlファイルにアクセスすることができません。なぜそれが "成功"ではなく "userexist"と "passerror"でしかアクセスできないのです。なぜアクセスできないのですか?そして、私は に何をする必要がありますエラー処理HTMLページの両方でこれらの変数にアクセスするのですか?

+1

ビューを表示する –

+0

レンダリングを3回使用する必要があります.1つだけレンダリングし、フラッシュ[:エラー]を渡すか、またはパーシャルを使用してください。 1つの方法でレンダリングやリダイレクトを何度も使用すると、レールにもエラーが表示されます。 – tebayoso

+0

*「両方のエラーhtmlファイルでアクセスできません」*これはどこで起こったのですか?私は 'userexist'や' passerror'がレンダリングされているところは見ません。 –

答えて

1

あなたは明示的renderに呼び出すことlocalsハッシュパラメータとしてアクセスしたいものは何でも渡すことがあります。

render "userexist", locals: { name: @name } 

nameは、基礎となるテンプレートに渡されます。

+0

インスタンス変数の代わりにローカル変数を送信することはできますか? – mrg

+0

確かに、ハッシュはそのまま渡されます。普通のルビーについてそれについて考えてみましょう。誰でもそこに置くかもしれない。 – mudasobwa

関連する問題