読者です 読者をやめる 読者になる 読者になる

パルカワ2

PerlとRubyとイチャラブ

DBICのfindでrowがなければ、Exceptionを出したい

findの後にif (!$row) { } みたいなの書きまくってて、腱鞘炎になりそうという問題があった。

package MyApp::Schema;
...;
use parent "DBIx::Class::Schema";

__PACKAGE__->load_namespaces(
    default_resultset_class => "ResultSet",
);

1;
package MyApp::Schema::ResultSet;
use parent "DBIx::Class::ResultSet";
use MyApp::Exception;

sub find {
    my $self = shift;
    my $row = $self->SUPER::find(@_);
    if (not defined $row) {
        # ここのファイル名とか行数が出ても意味がない
        my ($package, $filename, $line) = caller();
        die MyApp::Exception::DB::ResultNotFound->new(
            package => $package,
            file    => $filename,
            line    => $line,
        );
    }
    return $row;
}

という感じでやると便利でテンション上がると思ったが、update_or_createで死ぬという悲しい現実にぶち当たったので帰りたい。