Можно ли зациклить значение сеанса в файле 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
Метод всегда будет возвращать что-то, поэтому, если вы не получаете определенное значение, это потому, что этот код не выполняется.