我正在渲染部分作为Ajax调用的一部分而且收到错误
ActionView::Template::Error (The partial name (94.0) is not a valid Ruby identifier; make sure your partial name starts with underscore, and is followed by any combination of letters, numbers and underscores.):
我以前没见过这个,也不确定它是如何产生的。在这种情况下,94是@subtotal
的返回值我也希望有人可以在我做的时候澄清部分是如何呈现的(即命名视图惯例)
<%= j render partial: @object %>
所以在我的情况下,我有一个部分包含用户购物车中的项目小计
class CartItemsController < ApplicationController
def show
@subtotal = CartItem.subtotal
end
def destroy
@cart_item = CartItem.find(params[:id])
@cart_item.destroy
respond_to do |format|
if @cart_item.destroy
@subtotal = CartItem.subtotal
format.js { flash.now[:success] = 'Successfully removed from cart' }
else
format.js { flash.now[:error] = 'Sorry, Something went wrong' }
end
end
end
destroy.js.erb
$("#cart-subtotal").empty().append('<%= j render partial: @subtotal %>');
我的部分名称是_subtotal.html.erb,位于/views/subtotal/_subtotal.html.erb
有人能看出我这里做错了什么吗?
由于
答案 0 :(得分:2)
ActionView :: Template :: Error(部分名称(94.0)无效 Ruby标识符;确保您的部分名称以下划线开头, 然后是字母,数字和字母的任意组合 下划线。)
问题出在'<%= j render partial: @subtotal %>'
。 @subtotal
保留CartItem.subtotal
的值 94.0 。在渲染部分内容时,您应指定部分 的 名称,在您的情况下应 小计 。由于部分位置在/views/subtotal
,因此应为"<%= j render partial: 'subtotal/subtotal' %>"
答案 1 :(得分:1)
下面
("#cart-subtotal").empty().append('<%= j render partial: @subtotal %>');
您将@subtotal
对象作为参数传递给render partial:
,但它需要部分字符串名称。
两个选项:
1)将部分移动到cart_items
文件夹和
$("#cart-subtotal").empty().append('<%= j render partial: 'subtotal' %>');
2)将部分留在原处
$("#cart-subtotal").empty().append('<%= j render partial: 'subtotal/subtotal' %>');
关于变量@subtotal:
before_action :subtotal, only: %i(show destroy)
private
def subtotal
@subtotal ||= CartItem.subtotal
end
因此,您将@subtotal
变量DRY。