current_action没有返回动作

时间:2012-04-06 12:08:00

标签: ruby-on-rails ruby

在我的application_controller中,我添加了:

def instantiate_controller_and_action_names
          @current_action = action_name
          @current_controller = controller_name
      end

以便根据当前操作显示/隐藏视图中的某些字段。例如,在添加新用户时,我希望能够显示要填写的密码字段,但在编辑用户时,我不希望显示密码字段。

我遇到的问题是@current_action在创建新记录时只返回'new'值,但在编辑记录时没有返回值(ex- http://localhost:3000/users/6/edit) ,或者如果我使用反转并检查@current_action!='new'......在这两种情况下我的字段仍在显示。

<%if @current_action != 'new'%>
   <tr><td>AAAAAAA</td></tr>
   <%else%>   
   <tr>
    <th class="">Password</th> 
    <th class="">Password Confirmation</th> 
  </tr>
  <tr>
    <td><%= f.password_field :password %></td>
    <td><%= f.password_field :password_confirmation %></td> 
  </tr>
<%end%>

发生了什么'编辑'没有被退回和/或是否有更好/最佳实践方法来实现这一目标?谢谢!

3 个答案:

答案 0 :(得分:3)

为什么不测试你的对象,而不是使用控制器动作?您可以使用此方法查看对象是否是新记录

<% if f.object.new_record? %>
  Your code for new object
<% else %>
You code to edit object
  <%end%>

答案 1 :(得分:2)

无需设定行动价值

您可以在此类视图中访问它

    action_name  or params[:action]     #return the current action

    controller_name  or params[:controller]     #return the current controller

轻松使用.........

       <%if action_name != 'new'%>
           <tr><td>AAAAAAA</td></tr>
       <%else%>   
           <tr>
           <th class="">Password</th> 
          <th class="">Password Confirmation</th> 
          </tr>
          <tr>
          <td><%= f.password_field :password %></td>
         <td><%= f.password_field :password_confirmation %></td> 
         </tr>
      <%end%>

如果你想要你的代码,那么共鸣就不会被渲染而不能调用它。在

中添加这一行

应用程序控制器并检查

           before_filter :instantiate_controller_and_action_names

答案 2 :(得分:1)

好的,获取控制器和动作名称的最简单方法就是使用params。如此。

def current_action
  params["action"]
end

def controller_name
  params["controller"]
end

试一试。