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| -%>
<%= label_tag 'first_name' %>
<%= f.text_field :first_name %>
<%= label_tag 'last_name' %>
<%= f.text_field :last_name %>
<%= label_tag 'email' %>
<%= f.text_field :email %>
<% fields_for :role, @roles do |ff| %>
Select account type:
<%= label_tag :name_user, "User" %>
<%= ff.radio_button :name, "user" %>
<%= label_tag :name_admin, “Admin” %>
<%= ff.radio_button :name, “admin” %>
<%= submit_tag 'Sign up' %>
<% 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”}}