为什么控制器没有“看到”表单上输入的值

时间:2010-12-28 19:14:45

标签: ruby-on-rails forms params

我在Rails 3.0.3视图中得到了这个:

<%= form_tag line_items_path(:product_id => @product), :remote => true  do %>
  <%= number_field_tag (:amount, 1, { :size => 3, :min => 1}) %>
  <%= submit_tag t('button.add_to_cart'), :name => nil %>
<% end %>

视图渲染得很好。在line_items_controller的create方法中,我尝试访问数字字段:

@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.add_product(product.id, params[:amount])

这不起作用,所以我尝试通过将数字字段打印到控制台来检查数字字段:

p params[:amount]

无论我在表格字段中输入什么,都打印出“nil”。我还用

打印了整个params哈希
p params

得到了

{"product_id"=>"1", "action"=>"create", "controller"=>"line_items", "locale"=>"fi"}

即。 amount字段不存在,这解释了“nil”,但我有点(好吧,很多)在这里感到困惑,因为我已经阅读了form_tag文档,并且收集到控制器应该看到字段内容通过params[:amount],但它没有。

请帮帮我。我做错了什么?

/马力

1 个答案:

答案 0 :(得分:0)

我现在感觉很愚蠢...这个表单现在正常运行,当它完全位于<td>标签内时,就像这样:

  <tr>
   <td colspan="2">
      <%= form_tag line_items_path(:product_id => @product), :remote => true  do  %>
          <%= number_field_tag(:amount, 1, :size => 3, :min => 1) %>
          <%= submit_tag t('button.add_to_cart'), :name => nil %>
      <% end %>
   </td>
  </tr>

我分别在form_tag标记之前和end标记之后有<tr>和相应的</tr>

感谢您的时间!