将属性添加到购物车中

时间:2014-07-11 06:30:24

标签: ruby-on-rails charts

在我的产品视图下面,我有2个属性,我想通过photo.id传递 type.id和size.id

它们将全部保存在同一个订单项

button_to是一个远程操作,因此在按下按钮后它不会离开页面。

在line_items控制器中添加要传递给create的属性的最佳方法是什么?

产品视图

    %b Paper Type

    = select(:type_id, :type, options_from_collection_for_select_with_attributes(Type.all, 'id', 'name', 'data-price', 'price'), { :include_blank=>false }, {:class => 'vars'})

  %p
    %b Paper Size

    = select(:type_id, :type, options_from_collection_for_select_with_attributes(Size.all, 'id', 'name', 'data-price', 'price'), { :include_blank=>false }, {:class => 'vars'})

  %p
    %b Total:
    %span#total
      %input{:type=>"hidden", value: @photo.price, name: 'price', id: 'baseprice'}

      = number_to_currency (@photo.price)

    %br
    = button_to 'Add to Cart', line_items_path(photo_id: @photo.id), remote: true
    %br

订单项控制器

def create
photo = Photo.find(params[:photo_id])
@line_item = @cart.add_product(photo.id)

respond_to do |format|
  if @line_item.save
    format.html { redirect_to @line_item.cart }
    format.js { @current_item = @line_item }
    format.json { render action: 'show', status: :created, location: @line_item }
  else
    format.html { render action: 'new' }
    format.json { render json: @line_item.errors, status: :unprocessable_entity }
  end
 end
end

cart.rb模型

def add_product(photo_id)
  current_item = line_items.find_by(photo_id: photo_id) 
  if current_item
      current_item.quantity = current_item.quantity.to_i + 1
  else
      current_item = line_items.build(photo_id: photo_id, quantity: 1)
  end
    current_item
end

购物车初始化程序问题/ current_cart.rb

def set_cart 
  @cart = Cart.find(session[:cart_id])
  rescue ActiveRecord::RecordNotFound
    @cart = Cart.create
    session[:cart_id] = @cart.id
end

编辑:添加购物车初始化程序和add_product方法

1 个答案:

答案 0 :(得分:1)

button_to

button_to似乎能够将params传递给该方法,然后将其呈现为hidden fields

enter image description here

这意味着应该能够将您的额外属性作为button_to方法中的参数传递 - 允许您在控制器后端处理它们:

<%= button_to line_items_path(photo_id: @photo.id, type_id: "X", size_id: "Y") %>

-

<强>表格

这个问题是你只能传递参数static。我看到你能够选择它们,这完全适合form(特别是form_tag):

<%= form_tag line_items_path(photo_id: @photo.id) do %>
   <%= select_tag :type_id .....%>
   <%= select_tag :size_id .....%>
   <%= submit_tag "Save" %>
<% end %>

允许您将您需要的参数发送到button_to帮助程序范围之外的应用程序,以便在后端处理以下内容:

params[:type_id]
params[:size_id] 

etc