rails中action_name方法的可靠性如何?

时间:2012-03-29 21:52:40

标签: ruby-on-rails ruby model-view-controller controller

如何确保controller.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

----代码片段以回应Mischa的评论----

这就是我在控制器中所拥有的:

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提到的内容而有意义(动作在那里是用词不当......)。那么,有没有办法可以在不发布重定向的情况下完成此任务?我尚未使用重定向的唯一原因是保留用户当前选项卡的逻辑与渲染操作一起使用。如果唯一可行的方法是重定向,我可能不得不重写它。

1 个答案:

答案 0 :(得分:4)

命名有点令人困惑,但render :action => "edit"呈现了编辑视图。它与控制器操作编辑没有任何关系。 action_name是可靠的,但由于上述原因,你不能依赖它。打开一个新问题和/或分享更多代码,以获取有关如何解决问题的建议。