params哈希中提交选项的错误值

时间:2011-09-26 07:37:38

标签: ruby-on-rails

我正在其中一个应用中使用submit_tag表单助手。此提交按钮的值应动态更改。此提交按钮的两个可能值为SaveUpdate。因此,在视图中,我做了类似以下的事情:

<% 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。这里有什么不对?

1 个答案:

答案 0 :(得分:0)

如果您使用Rails助手,它提供了一种根据表单类型选择按钮上的文本的简单方法:

<%= form_for @activity do |f| %>
  <%= f.label :title %>:
  <%= f.text_field :title %><br />

  <%= f.submit %>
<% end %>

如果没有给出值,它会检查对象是否是新资源,以创建正确的标签。在上面的示例中,如果@activity是新记录,它将使用“创建活动”作为提交按钮标签,否则,它将使用“更新活动”。

P.S。请不要在您的视图中使用SQL