如何在Rails中使用局部视图来命中多个页面?

时间:2018-01-18 20:59:48

标签: ruby-on-rails

我有一个索引并显示两者都包含社交媒体共享,它看起来像这样:

 <% @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)

我是否错过了需要为我的部分添加内容?

2 个答案:

答案 0 :(得分:1)

您错过了locals

<% render partial: '/books/book', locals: { book: book } %>

答案 1 :(得分:0)

有两种方法可以做到这一点:

1),键为partial, locals

<% render partial: '/books/book', locals: { book: book } %>

2)没有按键partial, locals

<% render '/books/book', book: book %>

方法render在内部调用方法_normalize_args,因此,如果您使用第二种方法传递参数,它将自动检测要呈现的内容的类型。 docs