1

在我的 application_controller 中,我添加了:

def instantiate_controller_and_action_names
          @current_action = action_name
          @current_controller = controller_name
      end

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

我遇到的问题是 @current_action 在创建新记录时只返回一个值'new',但在我编辑记录时没有返回一个值(例如- 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%>

没有返回“编辑”是怎么回事和/或是否有更好/最佳实践方法来完成此操作?谢谢!

4

3 回答 3

3

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

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

于 2012-04-06T12:20:30.663 回答
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%>

如果你想要你的代码,reson 不会渲染不调用它。添加这一行

应用程序控制器和检查

           before_filter :instantiate_controller_and_action_names
于 2012-04-06T12:19:35.030 回答
1

好的,所以获取控制器和操作名称的最简单方法实际上就是使用参数。所以。

def current_action
  params["action"]
end

def controller_name
  params["controller"]
end

试试看。

于 2012-04-06T12:16:51.723 回答