0

アプリケーションにはAdd to Cart、新規作成するボタンがあります@line_item(コードは、Rails を使用したアジャイル開発に基づいています)。Ajax 機能を追加したので、Add to Cartページをリロードせず、@line_item to @cart.

しかし、Rails では、ボタンを 1 回押すごとに、これが 3 回行われます。

「カートに入れる」を押すと、3つのアイテムが追加されます。

また、カートを空にすると、「よろしいですか?」と 3 回尋ねられます。何が原因なのか、アイデアがありませんか?

def create
@cart = current_cart
product = Product.find(params[:product_id]) 
@line_item = @cart.add_product(product.id)
respond_to do |format|
if @line_item.save
format.html { redirect_to(store_url) }
format.js
format.xml { render :xml => @line_item,
:status => :created, :location => @line_item }
else
format.html { render :action => "new" }
format.xml { render :xml => @line_item.errors,
:status => :unprocessable_entity }
end
end
end

ボタン:

<%= button_to 'Add to Cart' , line_items_path(:product_id => product),:remote => true %>

create.js.erb:

$('#cart').html("<%= escape_javascript(render(@cart)) %>");

_cart.html.erb テンプレート:

<div class="cart_title" >Your Cart</div>
<table>
<%= render(cart.line_items) %>
<tr class="total_line" >
<td colspan="2" >Total</td>
<td class="total_cell" ><%= number_to_currency(cart.total_price) %></td>
</tr>
</table>
<%= button_to 'Empty cart' , cart, :method => :delete,
:confirm => 'Are you sure?' %>

_line_item.html.erb テンプレート:

<tr>
<td><%= line_item.quantity %>&times;</td>
<td><%= line_item.product.title %></td>
<td class="item_price" ><%= number_to_currency(line_item.total_price) %></td>
</tr>
4

1 に答える 1

0

問題が解決しました。

私のビューアプリケーションのレイアウトでは、そのようにするのが正しいと思いました

<!DOCTYPE html>
<html>
<head>
  <title>Store</title>
  <%= stylesheet_link_tag "store" %>
  <%= javascript_include_tag 'application' %>
  <%= csrf_meta_tags %>
  <title>Cart</title>
  <%= stylesheet_link_tag "carts" %>
  <%= javascript_include_tag 'cart' %> #this
  <%= csrf_meta_tags %>

実際、メインページで「アプリケーション」を使用すると、#これはJSコードの実行を複製すると思います

于 2013-02-17T16:33:44.593 に答える