【发布时间】:2012-08-28 06:00:24
【问题描述】:
我正在研究为数据库设计前端的催化剂。我是 perl 和催化剂的新手。我在控制器中遇到一个错误。
我想从一个表中获取基因名称并将每个基因名称传递给一个子程序gene_name(调用一个子程序gene_name),它将执行某些功能。我知道如何获取带有基因名称的列,但它们是以哈希引用的形式对其他表进行的。我对gene_name 的调用不起作用。
知道如何将值传递给子例程而不是引用吗? 我的代码如下:
my @gene_list = $c->model('Gene::GeneTable')->search({
},{
column =>[qw/symbol/],
}
);
foreach my $gene (@gene_list){
push @gene_aliases, &gene_name($gene);
}
执行代码后我得到的错误如下:
DBIx::Class::ResultSet::find(): Can't bind a reference (MyApp::Model::Gene::GeneTable=HASH(0x7ff6d88b7c58))
更新
我的gene_name() 子例程在我包含在控制器中的另一个模块中。现在我已经改变了for循环(在控制器中)如下,目前它正在将基因名称传递给gene_name()以获取别名(但查询保持不变):
foreach my $gene (@gene_list){
push @gene_aliases, &gene_name($gene-> symbol);
}
我正在访问我的视图文件中的@gene_aliases,如下所示:
[% FOREACH g in gene_aliases -%]
[% g %]
[% END -%]
上面的代码是在页面中获取哈希引用而不是名称。我无法在网页上显示基因名称。如果我在 for 循环中给出 [% g.symbol %] 则页面将为空且没有错误消息。希望这足以回答我的问题。如果不是,我会详细说明。
我的SQL查询如下:
Select Symbol from GeneTable;
提前致谢
更新2
由于我不是全职程序员,所以我在博客上提出这些问题。请帮助我解决我的问题。如果我有从用户获取基因名称的搜索表单,并且该基因名称必须传递给gene_name() 子例程,我该如何传递这个(传递给控制器以及如何调用gene_name())。请帮助我解决这个问题。 我在view.tt中的表格如下:
<form method="post" action "[% c.uri_for('/gene')%]">
<input type="text" name="search_alias">
<input type="submit" name="alias_search" value="Search">
</form>
我所有的别名都在另一个名为 Alias 的表中,该表在gene_name() 子例程中使用。
【问题讨论】:
-
首先,使用关键字'columns',而不是'column'。 metacpan.org/module/…
-
我自己不使用 DBIx::Class,但在我看来,
search的第一个哈希参数应该有一些参数,对吧?构建查询的目的不是相当于SELECT * FROM gene WHERE symbol = ? -
@ret 抱歉 Ret 我无法将我的问题正确地传达给您。请查看更新后的问题