根据rails中多个选择标记的值更新购物车

时间:2015-06-12 20:25:21

标签: jquery ruby-on-rails ajax ruby-on-rails-4

我在Rails中实现了一个购物车,这样当显示购物车时,每个商品的数量都会显示为一个选择标签,以允许用户更改数量(亚马逊的方式。)这就是我生成选择的方式标签,我为购物车中的每个item执行的操作:

<%= form_for :session, url: update_cart_path, html: { method: 'post'} do |f| %>
  <%= f.select :quantity_updated,
               options_for_select((1..item.quantity).to_a, quantity),
               {} ,{id: "quantity_select_#{item_id}"} %>
<% end %>

这是我的JavaScript代码:

$(document).ready ->
$("#quantity_select").change ->
    $.ajax "update_cart",
        method: "POST",
        data: {quantityUpdated: $("#quantity_select option:selected").val()},
        dataType: "script",
        error: (jqXHR, textStatus, errorThrown) ->
            console.log("AJAX error: #{textStatus}")
        success: (data, textStatus, jqXHR) ->
            console.log("AJAX OK")

item中的每个Cart都有一个item_id。为了为每个商品的数量选择标记提供唯一ID,我将{id: "quantity_select"}更改为{id: "quantity_select_#{item_id}"}。我需要在JavaScript文件中进行哪些更改才能正确处理每个select_tag更改?如何将item_id发送给控制器?我试过了url: update_cart_path(item_id: item_id)但是没有用。我也尝试了$.ajax "update_cart(#{item_id}),但也没有用。现在,控制器不知道哪个项目的数量已经改变。

1 个答案:

答案 0 :(得分:1)

您不需要将#{item.id}附加到所有选择标记。只需添加课程quantity_select即可。然后在你的javascript中

$('.quantity_select').change({ 
  /* your code */
});

也。获取select标记的值不是来自selected:选项。但是:

$('#quantity_select').val()

注意============================================== ==================== 因为您尝试获取的值来自已更改的选择器。这应该在脚本块中称为$(this).val()

我想做的最后一条评论是在rails中编码时避免使用双引号"。使用双引号,默认情况下,rails会认为它包含要解析的值。喜欢#{val}。如果您不包含解析值,请使用'