2012-03-29 48 views
3

如何確保controller.action_name返回正確的信息?我依靠它在菜單欄中生成用戶友好的消息。考慮以下情況。當我使用rails中的action_name方法有多可靠?

的ACTION_NAME方法的偉大工程:

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

但是當我用下面的它不會產生我需要的信息:

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

有沒有一種方法,我可以使用渲染行動,仍然得到正確的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 

基本上,如果用戶在編輯模式下,我想在菜單上的「查看保存的版本」鏈接。但是,當我使用「render:action」語法時,動作變爲「get」,這基於Mischa提到的內容(動作是一個用詞不當的地方)。那麼,有沒有一種方法可以在不發佈重定向的情況下完成此任務?我沒有使用重定向的唯一原因是保留用戶當前選項卡的邏輯適用於渲染操作。如果唯一可行的方法是通過重定向,我可能不得不重寫它。

+0

該行爲的routes.rb文件中有什麼? – 2012-03-29 23:06:17

+0

嗨弗雷德裏克 - 請參閱最新版本。我能夠將問題追溯到顯示編輯視圖的方式。 – Tabrez 2012-03-29 23:11:47

回答

4

命名有點混亂,但render :action => "edit"呈現編輯查看。它與控制器動作編輯沒有任何關係。 action_name是可靠的,但由於上述原因,你不能依靠它。打開一個新問題和/或分享一些更多的代碼,以獲得如何解決問題的建議。

+0

嗨米沙 - 感謝您的迴應。我添加了代碼片段以及爲什麼我還沒有更改爲重定向的原因。請檢查並告訴我是否有解決方法。 – Tabrez 2012-03-30 00:19:00

+0

米沙 - 感謝您的回答。至少我現在知道爲什麼它不起作用。我發現了另一種保存標籤狀態的選項,它現在允許我使用重定向。如果能夠使用渲染視圖語句而不失去渲染視圖的動作的軌跡,那將是非常好的。所以,如果談到你,請分享。再次感謝! – Tabrez 2012-03-30 00:42:33