Можно ли зациклить значение сеанса в файле erb?

Ниже мой код в контроллере

@parent_kids = Student.where("parent_id = ?", found_user.id )
session[:parent_kids] = @parent_kids

В представлении я попробовал следующий код, но не повезло:

<%  if(session[:parent_kids]) %>
     <% session[:parent_kids].each do |kids| %>
        <li >

       <a href="/school_users">
       <i class="menu-icon glyphicon glyphicon-th-list"></i>
       <span class="menu-text"> <%= kids.first_name %></span></a>

       </li>
      <% end %>
<% end %>

1 ответ

Обычно плохая идея помещать объекты в вашу сессию, они могут загромождать их в спешке. Помните, что вещи, помещенные в сеанс, довольно дороги в обращении, поэтому держите их небольшими, скудными и только для вещей, которые необходимы. Например, сериализация числового или строкового идентификатора пользователя - это хорошо, но сериализация всей пользовательской модели - нет.

То, что вы, вероятно, хотите, это использовать переменную экземпляра напрямую. Перебирая @parent_kids это лучший план здесь.

Как правило, при устранении неполадок, подобных этому, добавьте следующий код:

<% if @parent_kids %>
   ...
<% else %>
  <p>No kids?</p>
<% end %>

Если вы получаете сообщение "Нет детей", это означает, что переменная вашего экземпляра не определена правильно. Если вы ожидали, что это произойдет, вы можете покопаться, чтобы выяснить, почему.

Помните, что в Ruby существует большая разница между "не определено" и "определено, но пусто".

Более формальное определение будет выглядеть так:

<% if @parent_kids.any? %>
  ...
<% else %>
  <p>No kids!</p>
<% end %>

Модель where Метод всегда будет возвращать что-то, поэтому, если вы не получаете определенное значение, это потому, что этот код не выполняется.

Другие вопросы по тегам