在我的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%>
发生了什么'编辑'没有被退回和/或是否有更好/最佳实践方法来实现这一目标?谢谢!
答案 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
试一试。