部分名称Object不是有效的Ruby标识符

时间:2016-01-07 08:35:29

标签: ruby-on-rails ruby ajax ruby-on-rails-4

我正在渲染部分作为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

有人能看出我这里做错了什么吗?

由于

2 个答案:

答案 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。