If ActiveRecord were to know that it's supposed to create an habtm association to another object simply because a foreign_key is present in the attributes hash of the new object, then I think that would create a lot of overhead in the create method, and it's a bit too much magic in my opinion. On every create it would need to check the attributes hash for *_id attributes, then check if any habtm associations matches that, and if so create the record in the join table. Or a reverse version of that where it checks for habtm relations first. It's possible but that's not how it has been implemented.
On May 18, 10:09 pm, brianp <brian.o.pea...@gmail.com> wrote: > Hey Sharagoz, > > Thanks a lot. It worked exactly as desired. Now I was lead to believe > that the habtm relationship would be created automagically when the > user object is created. Why is it we had to explicitly define it like > this? > > Thanks a lot! > -brianp > > On May 18, 5:48 am, Sharagoz <shara...@gmail.com> wrote: > > > > > I dont use HABTM much myself, however I dont think this line will > > work: > > @user = �...@dealer.users.create(params[:user].merge(:role_id => 3) > > > Try something like this instead: > > @dealer = Dealer.create(params[:dealer]) > > @user = �...@dealer.users.new(params[:user]) > > @user.roles << Role.find(3) > > @user.save > > > On May 18, 12:22 pm, brianp <brian.o.pea...@gmail.com> wrote: > > > > Based of the declaritive_authorization railscast I've set up a roles > > > table containing 3 role types. A user table and a roles_users table. > > > No matter what I do the join table is always empty. > > > > DB: > > > create_table "roles", :force => true do |t| > > > t.string "role_type" > > > t.datetime "created_at" > > > t.datetime "updated_at" > > > end > > > > create_table "roles_users", :id => false, :force => true do |t| > > > t.integer "role_id" > > > t.integer "user_id" > > > end > > > > add_index "roles_users", ["role_id"], :name => > > > "index_roles_users_on_role_id" > > > add_index "roles_users", ["user_id"], :name => > > > "index_roles_users_on_user_id" > > > > create_table "users", :force => true do |t| > > > t.string "first_name", :null => false > > > t.string "middle_name" > > > t.string "last_name", :null => false > > > t.string "email", :null => false > > > t.string "dealer_id", :null => false > > > ............ > > > > role.rb model: > > > class Role < ActiveRecord::Base > > > has_and_belongs_to_many :users > > > > attr_protected :role_type > > > end > > > > user.rb model: > > > class User < ActiveRecord::Base > > > acts_as_authentic do |c| > > > c.logged_in_timeout = 10.minutes > > > c.login_field = :email > > > end > > > has_and_belongs_to_many :roles > > > belongs_to :dealer > > > > def role_symbols > > > roles.map do |file| > > > role.name_underscore.to_sym > > > end > > > end > > > > attr_accessible :email, :password, :password_confirmation, :first_name, > > > :middle_name, :last_name > > > > end > > > > The user is being created here: > > > �...@dealer = Dealer.new(params[:dealer]) > > > �...@dealer.save! > > > �...@user = �...@dealer.users.create(params[:user].merge(:role_id => 3) > > > �...@dealer.addresses.create(params[:mailing_address]) > > > > Every field is created without error except the join table is left > > > blank always. If i call: > > > @user.role.create it will successfully create a new role (with a blank > > > name which is bad) and a join table row. Other then that the join > > > table is always empty. > > > > Any suggestions. I've run out of things to try. > > > > cheers, > > > brianp > > > > -- > > > 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 rubyonrails-t...@googlegroups.com. > > > To unsubscribe from this group, send email to > > > rubyonrails-talk+unsubscr...@googlegroups.com. > > > For more options, visit this group > > > athttp://groups.google.com/group/rubyonrails-talk?hl=en. > > > -- > > 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 rubyonrails-t...@googlegroups.com. > > To unsubscribe from this group, send email to > > rubyonrails-talk+unsubscr...@googlegroups.com. > > For more options, visit this group > > athttp://groups.google.com/group/rubyonrails-talk?hl=en. > > -- > 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 rubyonrails-t...@googlegroups.com. > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscr...@googlegroups.com. > For more options, visit this group > athttp://groups.google.com/group/rubyonrails-talk?hl=en. -- 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 rubyonrails-t...@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.