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 %>
答案 0 :(得分:0)
没有id
,因为对象book
是一个数组,而不是一个书对象。查看检查周围的[]
。
要读取每本书的属性,您需要循环使用此局部变量。
首先对代码进行了一些改进
使用books
代替book
作为变量名。
当局部变量可用时,避免使用实例变量。
然后是代码
# 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 %>
答案 1 :(得分: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来显示所有细节。