Daniel,
Is it creating multiple groups with the same name in your database? What it
looks like could be happening is that your group name may already exist. If
that’s the case, the `create_user_group` method call fails due to your
uniqueness validation (see Ben’s note about `strip`), then the user’s
user_group is assigned to a record that has not been persisted. Ultimately
the `valid?` check on @group fails and redirects to your page that includes
your error message.
The simplest change you could make to account for this is to check the
validity of your group before saving the user record:
def create
@group = current_user.create_user_group(group_params)
if @group.valid?
current_user.user_group = @group
current_user.save
redirect_to '/user_groups/'[email protected]_name, :notice => "Your group has
been created"
else
redirect_to '/user_groups/', :error => "Error: group name may already be
taken. Search, or try a new name."
endend
Also, if your reasoning for removing the spaces from the group name is to
use the name as a URL parameter, you may want to consider using gsub in
addition to strip in order to substitute spaces for another character:
def strip_blanks
self.group_name = self.group_name.strip.gsub(/\s/,'-')end
That gsub statement will replace any space character inside of the name
with a dash.
On Wednesday, September 10, 2014 11:26:21 AM UTC-7, Daniel Bogart wrote:
>
> I have a User Group table with a group_name value that is entered when the
> group is created. If there is a space in the group name, for example "The A
> Team", the group name is still created, but it is not assigned to the
> current user, and it throws the error message in my if/else statement in
> the controller. Code is as follows:
>
> Controller:
>
> def create
> @group = current_user.create_user_group(group_params)
> current_user.user_group = @group
> current_user.save
> if @group.valid?
> redirect_to '/user_groups/'[email protected]_name, :notice => "Your group
> has been created"
> else
> redirect_to '/user_groups/', :error => "Error: group name may already
> be taken. Search, or try a new name."
> endend
>
> Model
>
> class UserGroup < ActiveRecord::Base
>
> has_many :users
>
> has_secure_password
> validates :password, :presence => true
>
> validates :group_name, :presence => true, :uniqueness => true
>
> before_validation :strip_blanks
> def strip_blanks
> self.group_name = self.group_name.stripend
>
> Create form:
>
> <div class="form-group">
> <label for="Group Name">Enter group name</label>
> <%= f.input :group_name, :required => true, :autofocus => true,
> :maxlength => 40, :input_html => { :class => "form-control" }, :label =>
> false, :placeholder => "Group name" %></div><div class="form-group">
> <label for="Password">Password</label>
> <%= f.input :password, :required => true, :autofocus => true, :maxlength
> => 40, :input_html => { :class => "form-control" }, :label => false,
> :placeholder => "Group password" %></div>
> <%= f.button :submit, :class => "btn btn-md btn-warning" %></div>
>
>
> Link to StackOverflow post if you want some
> points:http://stackoverflow.com/questions/25757686/rails-spaces-in-string-used-for-name-causes-validation-error
> Thanks!
>
> Daniel
>
>
--
--
SD Ruby mailing list
[email protected]
http://groups.google.com/group/sdruby
---
You received this message because you are subscribed to the Google Groups "SD
Ruby" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.