是否可以在erb文件中循环会话值?

时间:2016-01-11 21:02:18

标签: ruby-on-rails ruby 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 个答案:

答案 0 :(得分:2)

将对象放入会话通常是一个坏主意,他们可能会匆忙将其混乱。请记住,放入会话的内容处理起来相当昂贵,因此请保持小,精益,并且只针对必要的事情。例如,序列化数字或字符串用户ID很好,但序列化整个用户模型不是。

您可能想要的是直接使用实例变量。迭代@parent_kids是最好的计划。

通常在调试此类问题时,请添加以下代码:

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

如果你得到了#34;没有孩子&#34;消息表示您的实例变量未正确定义。如果你期待它,你可以做一些挖掘找出原因。

请记住,在&#34;未定义&#34;之间存在很大差异。和&#34;定义但是空的&#34;。

更正式的定义如下:

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

模型的where方法将始终返回某些内容,因此,如果您没有获得定义的值,那么因为该代码不是&# 39; t执行。