On 13/09/2007, <b class="gmail_sendername">Ian Docherty</b> &lt;<a href="mailto:catalyst@iandocherty.com">catalyst@iandocherty.com</a>&gt; wrote:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
My application has (effectively, subject to some cut and paste) the<br>following.<br><br>################<br><br>package MyApp::Schema;<br><br>use strict;<br>use warning;<br><br>use base qw(DBIx::Class::Schema);<br><br>__PACKAGE__-&gt;load_classes(qw(
<br>&nbsp;&nbsp;&nbsp;&nbsp;UsedPassword<br>));<br>1;<br><br>################<br><br>package MyApp::Schema::UsedPassword;<br><br>use strict;<br>use warning;<br><br>use base qw(DBIx::Class);<br><br>__PACKAGE__-&gt;load_components(qw(PK::Auto Core));
<br>__PACKAGE__-&gt;table(&#39;used_password&#39;);<br>__PACKAGE__-&gt;add_columns(qw(id user password));<br>__PACKAGE__-&gt;set_primary_key(&#39;id&#39;);<br><br>sub create_limited {<br>&nbsp;&nbsp;&nbsp;&nbsp;my ($self, $user, $password) = @_;
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;# password checking logic here<br>}<br>1;<br><br>################<br><br>package MyApp::Model::DBIC;<br><br>use strict;<br>use warning;<br><br>use base qw(Catalyst::Model::DBIC::Schema);<br><br>__PACKAGE__-&gt;config(
<br>&nbsp;&nbsp;&nbsp;&nbsp;schema_class&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#39;MyApp::Schema&#39;,<br>&nbsp;&nbsp;&nbsp;&nbsp;connect_info =&gt; [<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyApp-&gt;config-&gt;{db},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyApp-&gt;config-&gt;{db_user},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyApp-&gt;config-&gt;{db_password},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{AutoCommit =&gt; 1, quote_char =&gt; &#39;`&#39;, name_sep =&gt; &#39;.&#39;},
<br>&nbsp;&nbsp;&nbsp;&nbsp;]);<br>1;<br><br>################<br><br>As I mentioned, if I try to do a call to<br>$c-&gt;model(&#39;DBIC::UsedPassword&#39;)-&gt;create_limited( ... ); I get the fatal<br>error<br><br>Can&#39;t locate object method &quot;create_limited&quot; via package
<br>&quot;DBIx::Class::ResultSet<br><br>Which is why I think this is not the approach, unless you know otherwise?</blockquote><div><br>Whoops, my bad. $c-&gt;model() does indeed return a DBIx::Class::ResultSet, so you would need to retrieve/create an instance of your UsedPassword class from the resultset in order to call any methods on it:
<br><br>my $used_password = $c-&gt;model(&#39;DBIC::UsedPassword&#39;)-&gt;create( { user =&gt; &#39;user&#39;, password =&gt; &#39;password&#39; } );<br>$used_password-&gt;foo_method()<br><br>Having said that, if I understand correctly what you are trying to do, you probably don&#39;t want a create_limited method at all. I think you need to override the new() method in your UsedPassword class and perform the checks there instead:
<br><br>package MyApp::Schema::UsedPassword;<br>...<br><br>sub new {<br>&nbsp; my ( $class, $attrs ) = @_;<br>&nbsp; my $user = $attrs-&gt;{user};<br>&nbsp; my $password = $attrs-&gt;{password};<br>&nbsp; <br>&nbsp; # password checking logic here
<br>&nbsp; <br>&nbsp; my $new = $class-&gt;next::method($attrs);<br>&nbsp; return $new;<br>}<br><br>Also (and this may have been a typo on your part, but just in case), please note it&#39;s &quot;use warnings&quot; not &quot;use warning&quot; to enable warnings in Perl.
<br><br>Hope the above is useful.<br></div></div>