Как передать 2 аргумента, используя простую форму? - PullRequest
0 голосов
/ 18 января 2010

У меня есть очень простая корзина, которая отображает количество товара в текстовом поле и название товара. Я могу получить правильные данные, я не могу передать оба моих аргумента в свой метод (идентификатор инвентаря и количество). Я получаю ошибку аргумента в моем методе 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

инвентаризации_контроллер.rb: 24: в increment_inventory_quantity' inventories_controller.rb:24:in корзине_обновления '

со следующими параметрами:

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

Я действительно запутался, потому что, похоже, я передаю нужные мне параметры. Кроме того, URL-адрес имеет формат: http://localhost:3000/inventories/cart_update/5?quantity=3, что я тоже ожидал увидеть. Что я делаю, что явно не так?

Заранее спасибо!

1 Ответ

0 голосов
/ 18 января 2010

Просто измените строку 3 в cart_update и используйте вместо этого:

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 в свой собственный хэш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...