mojolicious循环遍历DBIx :: Class :: Ruleset->在模板中搜索的结果

时间:2014-11-30 21:45:02

标签: perl mojolicious

NB。实际上,这段代码运行正常,我的路线中只有一个错误。 我会在这里留下这个问题,以防它对某人有用......

我不确定如何在Mojolicious模板中访问搜索结果

例如,我试过这个,这不起作用:

sub list {
   my $self= shift;
   #Return a list of questions
   my @list = $self->db->resultset('Question')->search({}, {order_by => { -desc => 'q_order' }});
   $self->stash(list => \@list);
}

然后在我的模板中

% for my $item (@$list) {
  <%= $item->question %> 
  <%= $item->explanation %> <br />
% }

然而,这会产生错误

Not an ARRAY reference at template line x (where line x is the line containing @$list)

我尝试了其他各种各样的事情 如果我在列表上下文中调用搜索并转储结果,我可以看到我得到一个'Schema :: Result :: Question'对象的列表 - 这是正确的。

我只是不确定如何循环访问模板中的数据?

1 个答案:

答案 0 :(得分:0)

$self->db->resultset('Question')->search({}, {order_by => { -desc => 'q_order' }})

返回结果集。

你可以这样打电话给 - &gt;全部(你错过了->all

my @list = $self->db->resultset('Question')->search({}, {order_by => { -desc => 'q_order' }})->all;

或者,您可以像这样迭代结果集:

my $rs = $self->db->resultset('Question')->search({}, {order_by => { -desc => 'q_order' }});
while ( my $question = $rs->next ){
# do things with $question
}

这并没有立即获取所有这些问题,但是,因为它是一个结果集,它只在被调用时执行(即你开始迭代)。

这可能是第二种方法的优势。