我有一个购物车模型。每个购物车的数量都是哈希值。 我在edit.html.erb中渲染购物车。
我想添加编辑第二列的可能性。这是哈希的价值。 请参阅下一个代码中的评论:
<table class="table table-bordered">
<tr class="head-of-table">
<th>Продукт</th>
<th>Количество</th>
<th>Цена</th>
</tr>
<% current_user.cart.quantity.each do |k,v| %>
<tr>
<td>
<%= k %>
</td>
<td>
<%= v %>
<%= text_field_tag v # here I want to put a field and a button for updating this hash %>
</td>
<td>
<% i = Item.find_by(name: k) %>
<%= i.price * v.to_f %>
</td>
</tr>
<% end %>
</table>
UPD:
推车控制器:
class CartController < ApplicationController
def edit
unless current_user
redirect_to new_user_registration_url
else
@items = current_user.cart.items
@cart = current_user.cart
end
end
def update
@cart = current_user.cart
@cart.update(cart_params)
end
def make_an_order
@items = current_user.cart.items.all
@cart = current_user.cart
@cart.price = @cart.final_price(@items)
@cart.quantity = @cart.correct_quantity(@items)
@cart.save
redirect_to new_order_path
end
private
def cart_params
params.require(:comment).permit(:price, :quantity)
end
end
购物车型号:
class Cart < ActiveRecord::Base
belongs_to :user
has_many :positions
has_many :items, through: :positions
def final_price (items)
self.price = 0
items.each do |i|
self.price += i.price if i.price
end
self.save
return price
end
def correct_quantity(items)
h = Hash.new(0)
array = Array.new
items.each do |i|
array << i.name
end
array.each{|e| h[e] += 1}
self.quantity = h
self.save
return h
end
end
架构:
create_table "carts", force: :cascade do |t|
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.float "price", default: 0.0
t.hstore "quantity", default: {}, null: false
end
再次:购物车有一个哈希(hstore)。 我用这个哈希来舒适地显示购物车中的商品(参见correct_quantity)。键是项目名称,值是数量。 我想为用户添加编辑购物车中商品数量的可能性。由于使用哈希我不知道该怎么做。