1(带钥匙
2(没有钥匙
我有一个索引,显示两者都包含社交媒体共享,看起来像这样:
<% @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)
我错过了需要在我的部分添加一些东西吗?
你错过了locals
:
<% render partial: '/books/book', locals: { book: book } %>
有两种方法可以做到这一点:
1(带钥匙partial, locals
<% render partial: '/books/book', locals: { book: book } %>
2(没有钥匙partial, locals
<% render '/books/book', book: book %>
方法render
调用方法_normalize_args
内部,因此如果您使用第二种方法传递参数,它将自动检测要呈现的内容的类型。 文档