当前的动作名称问题

时间:2011-03-23 10:11:36

标签: ruby-on-rails ruby-on-rails-3

当我进入/编辑操作时,我看到编辑按钮,但问题是如果表单验证中出现错误,则呈现操作编辑,我看到创建按钮。我该如何解决?

<%= form_for(@page) do |f| %>
<% if controller.action_name =="edit" %>
<%= f.submit "Update" %>
<% else %>
<%= f.submit "Create" %>
<% end %>

4 个答案:

答案 0 :(得分:6)

<% if ["edit", "update"].include? params[:action] %>
  <%= f.submit "Update" %>
<% else %>
  <%= f.submit "Create" %>
<% end %>

更好的解决方案是将表单作为部分提取并使用按钮名称发送局部变量

您的edit观点:

<%= render :partial => "form", :locals => { :button_label => "Edit" } %>

您的create观点:

<%= render :partial => "form", :locals => { :button_label => "create" } %>

您的_form部分:

<%= form_for @object ... do |f| %>
  ...
  <%= f.submit button_label %>
<% end %>

<强> UPD

我认为@idlefingers解决方案最适合您的问题

答案 1 :(得分:5)

你可以只使用没有参数的f.submit。这将创建“更新页面”和“创建页面”等名称。如果要更改这些措辞,可以在您的语言环境中进行设置。没有条件,没有动作名称的混乱。简单。

答案 2 :(得分:2)

尝试执行此检查:

<%= form_for(@page) do |f| %>
<% if controller.action_name =~ /update|edit/  %>
<%= f.submit "Update" %>
<% else %>
<%= f.submit "Create" %>
<% end %>

答案 3 :(得分:2)

我的解决方案:

<%= form_for(@page) do |f| %>
  <%= f.submit(f.object.new_record? ? "Create" : "Update") -%>
<% end %>