0

私はこの男と同じ問題に直面しました

私は彼と同じようにrjsをjs.erbに変更します。そして、私たちは皆<%= button_to 'Add to Cart',line_items_path(:product_id => product) ,:remote=>true %>、AJAXリクエストをコントローラーに送信するために使用します。format.jscreate.js.erbを細かく実行します。しかし、カートは何も追加しませんでした。

ログ結果:

Rendered line_items/_line_item.html.erb (4.3ms) Rendered carts/_cart.html.erb (8.0ms) Rendered line_items/create.js.erb (8.8ms)

これが、AJAXリクエストを送信するindex.html.erbです。

<% if notice %>
<p id="notice"><%= notice %></p>
<% end %>
<h1>Your Pragmatic Catalog</h1>

<% @products.each do |product| %>
<div class="entry">
<%= link_to image_tag(product.image_url), line_items_path(:product_id => product), html_options = {:method => :post} %>
    <h3><%= product.title %></h3>
    <%=sanitize product.description %>
    <div class="price_line">
      <span class="price"><%= number_to_currency(product.price,:precision=>3) %></span>
      <%= button_to 'Add to Cart',line_items_path(:product_id => product) ,:remote=>true %>
    </div>
  </div>
<% end %>

これが、リクエストを処理するline_itemsコントローラー関数です。

  # POST /line_items
  # POST /line_items.json
  def create
     # for exercise only
    session[:counter] = nil

    @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_index_path }
        format.js
        format.json { render json: @line_item, status: :created, location: @line_item }
      else
        format.html { render action: "new" }
        format.json { render json: @line_item.errors, status: :unprocessable_entity }
      end
    end


  end

create.js.erb

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

2 に答える 2

4

問題を修正しました。AJAXリクエストからの応答のソースを確認するfirebugの機能を教えてくれる素晴らしい記事に感謝します。そして、JSLintはjavascript構文をチェックアウトするのに役立ちます。そして最後に、このような素晴らしいツールであるFirebugに感謝します。

問題は、構文エラーがある場合にjavascriptが実行されないことです。

私の問題では:

レンダリング結果をラップするには、二重引用符ではなく一重引用符を使用する必要があります。レンダリング結果は、「」と「」を含む多くのHTMLで出力され、それらをラップすると、JavaScriptで構文エラーが発生します。(double-qouatedでのdouble-qoutedは許可されていません)

だから私は単にに変更$('#cart').html("<%= escape_javascript(render(@cart)) %>");し ます$('#cart').html('<%= escape_javascript(render(@cart))%>');

この答えが、この悪夢のようなスタッフに苦しんでいる他の人々にも役立つことを願っています。これが可能であれば、質問率を上げるのを手伝ってください:)

于 2012-09-01T01:30:20.813 に答える
1

j()ヘルパーメソッドを使用してみましょう:$('#cart')。html( "<%= j render(@cart)%>");

于 2014-01-04T15:17:35.597 に答える