Частичные локальные рельсы не проходят через - PullRequest
1 голос
/ 05 октября 2019

У меня есть куча возможных вариантов для primary_category для blog. У каждого есть ассоциированный значок, поэтому я имею их в blogs/_category_icon.html.erb частичном:

<% case @blog.primary_category

 when "General" %>
    <%= link_to blogs_path, class: "text-slate" do %>
      <i class="fas fa-book-open pr-2"></i> <%= @blog.primary_category %>
    <% end %>
  <% when "Motivation" %>
    <%= link_to page_path("motivation"), class: "text-slate" do %>
      <i class="fas fa-mountain pr-2"></i> <%= @blog.primary_category %>
    <% end %>
  <% when "Mindset" %>
    <%= link_to page_path("mindset"), class: "text-slate" do %>
      <i class="fas fa-brain pr-2"></i> <%= @blog.primary_category %>
    <% end %>
  <% when "Resourcing" %>
    <%= link_to page_path("resourcing"), class: "text-slate" do %>
      <i class="fas fa-first-aid pr-2"></i> <%= @blog.primary_category %>
    <% end %>
  <% when "Planning" %>
    <%= link_to page_path("planning"), class: "text-slate" do %>
      <i class="fas fa-sitemap pr-2"></i> <%= @blog.primary_category %>
    <% end %>
  <% when "Time Management" %>
    <%= link_to page_path("time-management"), class: "text-slate" do %>
      <i class="fas fa-stopwatch pr-2"></i> <%= @blog.primary_category %>
    <% end %>
  <% when "Discipline" %>
    <%= link_to page_path("discipline"), class: "text-slate" do %>
      <i class="fas fa-cookie-bite pr-2"></i> <%= @blog.primary_category %>
    <% end %>

<% end %>

. Он отлично отрисовывается на моей blog#show странице с таким:

<%= render "blogs/category_icon", locals: { blog: @blog } %>

Однако, когдаЯ пытаюсь вызвать его на странице blogs#index из блока <% @blogs.each do |blog| %>, появляется сообщение об ошибке undefined method 'primary_category' for nil:NilClass.

Код на странице blogs#index выглядит следующим образом:

<% @blogs.each do |blog| %>
  ...
  <%= render "blogs/category_icon", locals: { blog: blog } %>
  ...
<% end %>

Кто-нибудь может понять, почему этот локальный канал не проходит должным образом?

1 Ответ

3 голосов
/ 05 октября 2019

Как указано в ActionView/PartialRenderer, вам нужно использовать опцию partial:

<%= render partial: "blogs/category_icon", locals: { blog: blog } %>

Обратите внимание, что вы также можете использовать опцию рендеринга коллекции частичных чисел, нона этот раз с использованием комбинации параметров collection и as:

<%= render partial: "blogs/category_icon", collection: @blogs, as: :blog %>

Итерация по элементам @blogs выполняется Rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...