我正在其中一个应用中使用submit_tag
表单助手。此提交按钮的值应动态更改。此提交按钮的两个可能值为Save
和Update
。因此,在视图中,我做了类似以下的事情:
<% temp = 0 %>
<% text = '' %>
<% temp = ActivityLog.find_by_sql("SELECT COUNT(id) AS cnt FROM logs WHERE id > 0")%>
<% text = temp[0][:count].to_i > 0 ? 'Update' : 'Save' %>
<!-- other html contents -->
<%= submit_tag text, :id=>"submitBtn"+i.to_s, :onclick=>"submit_button_clicked(this)"%>
现在,当我在浏览器中运行视图时,我可以看到所需的效果。但是rails控制器收到commit
哈希中params
选项的错误值。
例如,当text
的值被评估为Save
时,我在Firebug中得到以下内容:
<input type="submit" value="Save" style="" onclick="submit_button_clicked(this)" name="commit" id="submitBtn3">
但相关控制器中的raise params.inspect
显示以下内容:
{"commit"=>"Update",
"authenticity_token"=>"",
"time"=>{"292"=>"3.0",
"2"=>"1.0",
"456"=>"4.0"},
"date"=>"2011-09-20"}
请参阅,虽然“提交”按钮的值在HTML中显示为Save
,但rails控制器会将commit
的值显示为Update
。这里有什么不对?
答案 0 :(得分:0)
如果您使用Rails助手,它提供了一种根据表单类型选择按钮上的文本的简单方法:
<%= form_for @activity do |f| %>
<%= f.label :title %>:
<%= f.text_field :title %><br />
<%= f.submit %>
<% end %>
如果没有给出值,它会检查对象是否是新资源,以创建正确的标签。在上面的示例中,如果@activity是新记录,它将使用“创建活动”作为提交按钮标签,否则,它将使用“更新活动”。
P.S。请不要在您的视图中使用SQL