0

js.erb

$('#search_div').html('<%=j render :partial=> 'find_book',locals: { book: @results }, :formats => :html  %>')

html.erb

<% @book=book %>
<%= @book.inspect %>
<% @book.id %>

当我进行检查时,它可以找到并显示给我

[#<Book id: 55, name: "consequatur laborum quidem excepturi", isbn: 9782943127358, price: 4023, comment: nil, created_at: "2013-09-01 02:59:29", updated_at: "2013-09-01 02:59:29", author: nil, sale_type: nil, publisher: nil, sn: nil, category: nil>] [#<Book id: 55, name: "consequatur laborum quidem excepturi", isbn: 9782943127358, price: 4023, comment: nil, created_at: "2013-09-01 02:59:29", updated_at: "2013-09-01 02:59:29", author: nil, sale_type: nil, publisher: nil, sn: nil, category: nil>]

但是当我尝试使用 @book.id

它给了我。

ActionView::Template::Error (undefined method `id' for #<Array:0x007faef875b260>):
    1: <% @book=book %>
    2: <%= @book.inspect %>
    3: <% @book.id %>
4

2 回答 2

0

没有id,因为该对象book是一个数组,而不是 book 对象。查看[]周围的检查。

要读取每本书的属性,您需要循环这个局部变量。

首先对代码进行了一些改进

  1. 使用books而不是book作为变量名。

  2. 当您有可用的局部变量时,避免使用实例变量。

然后代码

# JS
$('#search_div').html('<%=j render :partial=> 'find_book',
                                   locals: { books: @results } %>'

# partial: _find_book.html.erb
<% books.each do |book| %>
   <%= book.id %>
   <%= book.other_attribute %>
<% end %>
于 2013-09-13T04:37:52.550 回答
0

如您所见,您的 @book 是一个数组:

[#<Book id: 55, name: "consequatur laborum quidem excepturi", isbn: 9782943127358, price: 4023, comment: nil, created_at: "2013-09-01 02:59:29", updated_at: "2013-09-01 02:59:29", author: nil, sale_type: nil, publisher: nil, sn: nil, category: nil>] [#<Book id: 55, name: "consequatur laborum quidem excepturi", isbn: 9782943127358, price: 4023, comment: nil, created_at: "2013-09-01 02:59:29", updated_at: "2013-09-01 02:59:29", author: nil, sale_type: nil, publisher: nil, sn: nil, category: nil>]

注意开头和结尾的“方括号”([])。屁股错误表明你不能在数组上调用 id ,要么

@book.first.id etc 

或者在传递它时传递第一个结果,例如:

$('#search_div').html('<%=j render :partial=> 'find_book',locals: { book: @results.first }, :formats => :html  %>')

或者,如果您的计划是拥有多个对象,则循环通过变量 @book 以显示所有详细信息。

于 2013-09-13T04:38:07.937 回答