如何更新哈希值?

时间:2016-09-29 16:30:46

标签: ruby-on-rails ruby

我有一个购物车模型。每个购物车的数量都是哈希值。 我在edit.html.erb中渲染购物车。

看起来像这样:enter image description here

我想添加编辑第二列的可能性。这是哈希的价值。 请参阅下一个代码中的评论:

<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)。键是项目名称,值是数量。 我想为用户添加编辑购物车中商品数量的可能性。由于使用哈希我不知道该怎么做。

0 个答案:

没有答案