If i understood correctly, you want the role to be added to the user
upon creation, but its not.
here is the code that would do it
def create
logout_keeping_session!
params[:user][:login] = params[:user][:first_name] + params[:user]
[:last_name]
# Create a random password.
params[:user][:password] = User.generate_pass 8
@user = User.new(params[:user], :roles => [ Role.new(params
[:role]) ] # in an array
# success = @user && @user.save # user will always have
something, therefore this line is redundant
if @user.save
redirect_back_or_default('/')
flash[:notice] = "Thanks for signing up!"
else
flash[:error] = "Too bad sucka!"
render :action => 'new'
end
end
hope it helps
On Mar 16, 11:09 pm, elliottg <[email protected]> wrote:
> Hello.
>
> Stuck on some HABTM stuff here... I'm new to rails and I'm kinda lost
> on this topic.
> FYI This is all within the context of a working restful_authentication
> and role_requirement setup. I am simply adding a radio button pair to
> my new user form. When submitted, I need the appropriate tables
> updated. As is, only the user table will update. The join table will
> not. I have tried a handful of different things both for the
> fields_for params and inside the controller's create action with no
> luck yet. Here's what I have below.
>
> Thanks for the input!
>
> THE CLASSES:
> class User < ActiveRecord::Base
> has_and_belongs_to_many :roles
> end
>
> class Role < ActiveRecord::Base
> has_and_belongs_to_many :users
> end
>
> THE CONTROLLER: Edited for brevity...
> class UsersController < ApplicationController
> def new
> @user = User.new
> end
>
> def create
> logout_keeping_session!
> username = params[:user][:first_name]
> username += params[:user][:last_name]
> params[:user][:login] = username
>
> # Create a random password.
> random_p = User.generate_pass 8
> params[:user][:password] = random_p
>
> @user = User.new(params[:user])
>
> success = @user && @user.save
> if success && @user.errors.empty?
> redirect_back_or_default('/')
> flash[:notice] = "Thanks for signing up!"
> else
> flash[:error] = "Too bad sucka!"
> render :action => 'new'
> end
> end
> end
>
> THE FORM: new.html.erb
> <% form_for @user do |f| -%>
>
> <p><%= label_tag 'first_name' %><br/>
> <%= f.text_field :first_name %></p>
>
> <p><%= label_tag 'last_name' %><br/>
> <%= f.text_field :last_name %></p>
>
> <p><%= label_tag 'email' %><br/>
> <%= f.text_field :email %></p>
>
> <% fields_for :role, @roles do |ff| %>
> <p>Select account type:<br>
> <%= label_tag :name_user, "User" %>
> <%= ff.radio_button :name, "user" %>
>
> <%= label_tag :name_admin, "Admin" %>
> <%= ff.radio_button :name, "admin" %>
> </p>
> <% end %>
>
> <p><%= submit_tag 'Sign up' %></p>
> <% end -%>
>
> Here's a sample of how the params are going out:
> Processing UsersController#create (for 127.0.0.1 at 2009-03-16
> 17:59:38) [POST]
> Parameters: {"user"=>{"first_name"=>"Willy", "last_name"=>"Wonka",
> "email"=>"[email protected]"}, "commit"=>"Sign up",
> "authenticity_token"=>"05d982e6eabe5eba6dac466723f9402b9522b3b1",
> "role"=>{"name"=>"admin"}}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---