我的服务器控制台输出如下:
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))
答案 0 :(得分:1)
您需要在订单项视图文件夹中创建create.js.erb。 Ajax将与响应em js(format.js)一起使用。因为动作是创建Rails将查找与js文件中的动作相同的名称,在这种情况下,create.js.erb。但请记住,create.js.erb是完成所有工作以使订单项神奇地出现在购物车上。
这是我前一段时间的代码,同一本书。
答案 1 :(得分:0)
正如Cassio所说,我必须在views / line_items中创建create.js.erb文件并添加以下代码。
$('#cart')。html(“&lt;%= escape_javascript render(@cart)%&gt;”);
感谢。