我有一个索引并显示两者都包含社交媒体共享,它看起来像这样:
<% @books.drop(1).each_slice(2) do |bookish| %>
<div class="row">
<% bookish.each do |book|%>
<div class="fb-share-button" id="fbid>
<div data-href="url.com/<%= book.book_name %>" data-layout="button" data-size="small">
<a class="share-link" target="_blank" href="facebook.com/<%=book.book_description%>">
这适用于索引和节目,但由于我在多个位置重复相同的代码,我宁愿只使用局部视图。因此,当我将该代码移动到部分代码中并将其替换为:
<% render partial: '/books/book' %>
我最终获得了book_name的未定义方法。看着我的终端,它正在分享
ActionView::Template::Error (undefined method 'book_name' for nil:NilClass)
我是否错过了需要为我的部分添加内容?
答案 0 :(得分:1)
您错过了locals
:
<% render partial: '/books/book', locals: { book: book } %>
答案 1 :(得分:0)
有两种方法可以做到这一点:
partial, locals
<% render partial: '/books/book', locals: { book: book } %>
partial, locals
<% render '/books/book', book: book %>
方法render
在内部调用方法_normalize_args
,因此,如果您使用第二种方法传递参数,它将自动检测要呈现的内容的类型。 docs