検索機能を実装する際のコードの書き方について
検索機能を実装した当初、年月・部署・名前を全て指定しないと正常に検索結果が表示されなかった。
いずれかの項目が入力されなかった場合でも、条件一致するテーブルを表示させるために下記のようなコードを書いた。
sub kikaito :Local { my ( $self, $c ) = @_; $c->stash->{kikais} = [$c->model("DB::Kikai")->all]; my $params = $c->req->params; if ( !($params->{yyyymm}) && $params->{department} && !($params->{name})){ $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ department => $params->{department}})]; } elsif (!($params->{yyyymm}) && $params->{department} && ($params->{name })) { $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ department => $params->{department}, name => $params->{name}})]; } elsif (!($params->{yyyymm}) && !($params->{department}) && ($params->{name})) { $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ name => $params->{name}})]; } elsif ( $params->{yyyymm} && !($params->{department}) && $params->{name}) { $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ yyyymm => $params->{yyyymm}, name => $params->{name}})]; } elsif ( $params->{yyyymm} && $params->{department} && !($params->{name})) { $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ yyyymm => $params->{yyyymm}, department => $params->{department}})]; } elsif ( $params->{yyyymm} && !($params->{department}) && !($params->{name})) { $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ yyyymm => $params->{yyyymm}})]; } }
とても見辛い、、
絶対もっと良い書き方があるよねと同期と話してた。