基于Ajax的购物车不能正常工作_使用Rails 4.0进行Web开发

时间:2014-02-02 14:49:09

标签: ajax ruby-on-rails-4

我的服务器控制台输出如下:

  Completed 500 Internal Server Error in 15ms

    ActionView::MissingTemplate (Missing template line_items/create, application/create with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in:
      * "/Users/MacBook/rails_projects/depot/app/views"):
    app/controllers/line_items_controller.rb:47:in `create'
    Rendered /usr/local/rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/missing_template.erb within rescues/layout (0.7ms)

/app/controller/line_items_controller.rb如下:

 def create
     product = Product.find(params[:product_id])
      @line_item = @cart.add_product(product.id)

    respond_to do |format|                    ----> Line 47
      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

app / views / store / index.html.erb如下: -

<% if notice %>
<p id='notice'><%= notice %></p>
<% end %>

    <h1>Your Pragamtic Catalogue </h1>

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

<% end %>

当我向购物车添加书籍时,浏览器不会做任何事情,但是当我刷新浏览器时,书籍会被添加。我错过了什么吗?

respond_to do | format | of line_items_controller.rb是引发错误的第47行。

view / line_items / create.js.rjs文件如下:

page.replace_html('cart', render(@cart))

2 个答案:

答案 0 :(得分:1)

您需要在订单项视图文件夹中创建create.js.erb。 Ajax将与响应em js(format.js)一起使用。因为动作是创建Rails将查找与js文件中的动作相同的名称,在这种情况下,create.js.erb。但请记住,create.js.erb是完成所有工作以使订单项神奇地出现在购物车上。

这是我前一段时间的代码,同一本书。

create.js.erb

create action on line_items_controller

答案 1 :(得分:0)

正如Cassio所说,我必须在views / line_items中创建create.js.erb文件并添加以下代码。

$('#cart')。html(“&lt;%= escape_javascript render(@cart)%&gt;”);

感谢。