如何使用简单表单传递2个参数?

时间:2010-01-18 04:57:50

标签: ruby-on-rails parameters arguments

我有一个非常简单的购物车,它在text_field中显示商品数量,以及商品名称。我可以获取正确的数据,我无法将我的两个参数传递给我的方法(库存ID和数量)。我在库存控制器的cart_update方法中收到了一个参数错误。

add_to_cart.html.erb

<% for item in @cart.items %>
<tr>
<td><% form_for item, :url => {:action => "cart_update", :id => "#{item.getinventoryid}", :quantity => "3"} do |f| %>
  <%= f.text_field :quantity, :size => '3' %>
  <%= f.hidden_field :id, :value => "#{item.getinventoryid}" %>
  <%= f.submit 'cart_update' %>
<% end %></td>
<td><%=h item.title %></li></td>
</tr>
<% end %>

cart_item.rb模型

attr_accessor :inventory, :quantity

    def initialize( inventory )
        @inventory = inventory
        @quantity = 1
    end

cart.rb模型

attr_accessor :items

def increment_inventory_quantity(inventory, quantity)
   inventory_to_increment = @items.select{|item| item.inventory == inventory}

   # We do this because select will return an array
   unless inventory_to_increment.empty?
      inventory_to_increment = inventory_to_increment.first
   else
      # error handling here
   end

   inventory_to_increment.quantity = quantity
end

inventories_controller.rb

def cart_update
        @inventory = Inventory.find(params[:id])
        @cart = find_cart
        @cart.increment_inventory_quantity(params[:inventory])
    end

错误内容为: ArgumentError in InventoriesController#cart_update

inventories_controller.rb:24:in increment_inventory_quantity' inventories_controller.rb:24:in cart_update'

使用以下参数:

{"commit"=>"cart_update",
 "quantity"=>"3",
 "_method"=>"put",
 "authenticity_token"=>"CK6to1uGWPszjz8vfL1Er3DLgi8cIMtLxfFb49a4wCE=",
 "id"=>"5",
 "cart_item"=>{"quantity"=>"11",
 "id"=>"5"}}

我真的很困惑,因为它似乎传递了我需要的参数。此外,网址格式为:http://localhost:3000/inventories/cart_update/5?quantity=3,这也是我期待看到的。我在做什么显然是错的?

提前致谢!

1 个答案:

答案 0 :(得分:0)

只需更改cart_update的第3行,然后改用:

if(params[:cart_item] && params[:cart_item][:id])
    @cart.increment_inventory_quantity(params[:cart_item][:id], params[:cart_item][:quantity])
else
    # Error handling
end

您可以从POST数据中看到:

{ ... ,
  "cart_item"=>{"quantity"=>"11", "id"=>"5"}
}

rails将cart_item详细信息嵌入到自己的哈希值中。