データベースのフロントエンドを設計するための触媒に取り組んでいます。私はperlと触媒が初めてです。コントローラーで 1 つのエラーが発生しました。
あるテーブルから遺伝子名を取得し、各遺伝子名を特定の機能を実行するサブルーチン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 -%]
上記のコードは、ページ内の名前の代わりにハッシュ参照を取得しています。Web ページに遺伝子名を表示できません。for ループで [% g.symbol %] を指定すると、ページは空になり、エラー メッセージは表示されません。これが私の質問に答えるのに十分な情報であることを願っています。そうでない場合は、詳しく説明します。
私のSQLクエリは次のとおりです。
Select Symbol from GeneTable;
前もって感謝します
UPDATED2
私はフルタイムのプログラマーではないので、ブログでこれらの質問をしています。私の問題を解決するのを手伝ってください。ユーザーから遺伝子名を取得する検索フォームがあり、この遺伝子名を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>
私のエイリアスはすべて、gene_name() サブルーチンで使用されている Alias という別のテーブルにあります。