2012-03-29 52 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