2012-03-29 9 views
3

どのようにすれば、controller.action_nameが正しい情報を返すことができますか?私は、メニューバーにユーザーフレンドリーなメッセージを生成するためにそれに頼っています。以下のシナリオを考えてみましょう。私はレンダリングに使用できる方法はありrailsのaction_nameメソッドの信頼性はどれくらいですか?

render :action => "edit" # The action_name shows as "get" instead of "edit" 

:私が使用している場合

ACTION_NAME方法は素晴らしい作品:

redirect_to edit_profile_path # I get action_name as "edit" in my ApplicationController 

をしかし、私は次のように使用する場合、それは私が必要な情報を得られませんまだ正しいaction_nameを取得していますか?

おかげで、 Tabrez

----ミーシャさんのコメントに応答するコードスニペット----

これは私がコントローラに持っているものです。

def update 
    if @profile.update_attributes(params[:profile]) 
     format.html { 
      flash.now[:notice] = 'Profile was successfully updated.'    
      render :action => "edit" 
     } 
end 

私はないですユーザーが編集モードのままにしておきたいからです。私は次のような効果にコードを持って自分のアプリケーションヘルパーで

if(action_name == "edit" && (can? :read, l_disp_object)) then 
    path_links_subheader.concat(link_to 'Show Saved Version', :controller => controller.controller_path, :action => :show) 
end 

をユーザーが編集モードの場合、基本的に、私は、メニューの「表示に保存されたバージョン」リンクをしたいです。しかし、「レンダリング:アクション」構文を使用すると、アクションが「取得」に変わります。これはミシャが述べたことに基づいて意味があります。ですから、リダイレクトを発行せずにこれを達成できる方法はありますか?私がまだリダイレクトを使用していない唯一の理由は、ユーザーの現在のタブを保持するためのロジックがレンダリング動作で動作することです。これを達成するための唯一の方法がリダイレクトによるものであれば、私はそれを書き直さなければならないかもしれません。

+0

あなたのroutes.rbファイルにはそのアクションの内容は含まれていますか? –

+0

こんにちはフレデリック - 更新されたバージョンをご覧ください。編集ビューを表示する方法で問題をトレースすることができました。 – Tabrez

答えて

4

名前は少し混乱しますが、render :action => "edit"は編集ビューをレンダリングします。それはコントローラアクション編集とは関係ありません。 action_nameは信頼性がありますが、上記の理由からあなたはそれに頼ることはできません。新しい質問を開き、問題を解決するための提案のためのコードをいくつか共有してください。

+0

こんにちはMischa - 応答に感謝します。コードスニペットと、リダイレクトに変更していない理由を追加しました。解決策があるかどうかを確認してお知らせください。 – Tabrez

+0

ミッシャ - 答えてくれてありがとう。少なくとも私は今それがうまくいかなかった理由を知っています。タブの状態を保存するための代替手段が見つかりました。これでリダイレクトを使用できるようになりました。ビューをレンダリングしたアクションのトラックを失うことなく、レンダリングビューステートメントを使用する何らかの方法があるとよいでしょう。だから、それがあなたに来たら、分かち合う。再度、感謝します! – Tabrez

関連する問題