DBIx::SkinnyでFormValidator::Simple::Plugin::DBIC::Uniqueを使う
Skinny使い始めて、FV::SimpleでDBIC::Uniqueなバリデーションは自分でPlugin書かないとダメかと思ったけど、自分の使い方だとそのままいけたのでメモっとく。
FV::Simple::Plugin::DBIC::Uniqueは指定のクラスがDBIC互換のcountメソッドを持っていれば問題なく動くので、SkinnyをラップしたModelのクラスにcount()を実装してやればOK。
package MyApp::User; use FormValidator::Simple qw/DBIC::Unique/; sub validate { my ($self, $args) = @_; my $result = FormValidator::Simple->check($args => [ id => [ qw/UINT/ ], name => [ qw/NOT_BLANK ASCII/, [ qw/LENGTH 0 255/ ] ], { name => [ qw/id name/ ] } => [ [ 'DBIC_UNIQUE', __PACKAGE__, '!id', 'name' ] ], ]); return $result if $result->success; croak $result; } sub count { my ($class, $args) = @_; MyApp::DB->count('users', 'id', $args); }
とか書けば、MyApp::User->validate({ id => 1, name => 'nekoya'}); とかできます。
DBIx::Skinnyは各自で好みのラッパを書いてなんぼだと思うので、そのへんのノウハウがもっと出てくるといいすね。