Thanks to the advice I have received, I have made the following modifications which I will include for future reference to anyone who may have had the same questions as me... thanks dhoss and perrin!
Controller
sub create :Local{
my ( $self, $c ) = @_;
my $nation = $c->request->params->{nation};
#Action Logic; Form was submitted, lets create then
#Check to see if the nation name already exists
#UPDATED: create method overloaded to return 0 if
#nation name exists
if($nation) {
if($c->user->nations->create({
name => $nation,
owner => $c->user->get('id'),
map_nation_resource => [ { resour
+ce_id => 1 }, { resource_id => 2 } ],
})){
$c->redirect($c->uri_for('/nation'));
}
else {
$c->stash->{error_msg} = "Nation name already taken!";
}
}
return $c->stash->{template} = 'nation/create.tt2';
}
ResultSet subclass
package Game::DB::ResultSet::Nation;
use strict;
use warnings;
use base 'DBIx::Class::ResultSet';
#Override nation's create method to check if nation name exists
#Before creating. If it does, return 0
sub create {
my $self = shift;
my $nation) = shift;
if($self->find( {name => $nation->{name}} ) ) {
return 0;
}
$self->next::method($nation);
}
1;