2011-03-23 42 views
3

当我在/编辑动作时,我看到编辑按钮,但问题是如果在表单验证中出现错误,它呈现动作编辑,我看到创建按钮。我该如何解决它?当前动作名称问题

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

名称按钮 “提交” :) – Chirantan 2011-03-23 10:13:23

回答

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解决方案最适合您的问题

2

尝试做这个检查:

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

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

+0

不错,不知道,会尝试。 – Zabba 2011-03-23 11:27:13

+0

使用本地化的+1 – fl00r 2011-03-23 11:48:42

2

我的解决办法:

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

这不起作用。当创建新记录并且验证失败时,'new_record?'仍然会成立。 – Zabba 2011-03-23 11:26:27

+0

什么是错的?如果创建新记录失败,该记录是新的,并且按钮标签应该是“创建”。 – BitOfUniverse 2011-03-23 13:00:02