Kevin, When I submit the form to create a group my app creates the group, saves it to the user, then tries to create the group *again* (which it shouldn't), sees that there is already a group with that group name (obviously, because it was just created seconds ago), and throws the error.
Your refactoring of my controller method helped - now the group is created, assigned to the user, user gets redirected to the '/user_groups/'[email protected]_name appropriately, but the error message: "Error: group name may already be taken. Search, or try a new name." still gets posted. I just can't figure out why the create method is being run more than once... -Daniel On Wednesday, September 10, 2014 12:24:03 PM UTC-7, Kevin Thompson wrote: > > 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.
