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.

Reply via email to