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-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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]) > -+GkjbCIoGG/fhZSSa7DgLw@public.gmane.org! > @user = -vLsUqK4x/yY6h7L+opB42NneSfRQY1bS@public.gmane.org(params[:user].merge(:role_id => 3) > -wp7qHjWjV1M9U7wjPYoI1BA4Q1XS7C7X@public.gmane.org(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-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@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-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I dont use HABTM much myself, however I dont think this line will > work: > @user = -vLsUqK4x/yY6h7L+opB42NneSfRQY1bS@public.gmane.org(params[:user].merge(:role_id => 3) > > Try something like this instead: > @dealer = Dealer.create(params[:dealer]) > @user = -vLsUqK4x/yapYMH4hxceFw@public.gmane.org(params[:user]) > @user.roles << Role.find(3) > @user.save > > On May 18, 12:22 pm, brianp <brian.o.pea...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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]) > > -+GkjbCIoGG/fhZSSa7DgLw@public.gmane.org! > > @user = -vLsUqK4x/yY6h7L+opB42NneSfRQY1bS@public.gmane.org(params[:user].merge(:role_id => 3) > > -wp7qHjWjV1M9U7wjPYoI1BA4Q1XS7C7X@public.gmane.org(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-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > 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-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@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-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > > I dont use HABTM much myself, however I dont think this line will > > work: > > @user = -vLsUqK4x/yY6h7L+opB42NneSfRQY1bS@public.gmane.org(params[:user].merge(:role_id => 3) > > > Try something like this instead: > > @dealer = Dealer.create(params[:dealer]) > > @user = -vLsUqK4x/yapYMH4hxceFw@public.gmane.org(params[:user]) > > @user.roles << Role.find(3) > > @user.save > > > On May 18, 12:22 pm, brianp <brian.o.pea...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 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]) > > > -+GkjbCIoGG/fhZSSa7DgLw@public.gmane.org! > > > @user = -vLsUqK4x/yY6h7L+opB42NneSfRQY1bS@public.gmane.org(params[:user].merge(:role_id => 3) > > > -wp7qHjWjV1M9U7wjPYoI1BA4Q1XS7C7X@public.gmane.org(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-talk-/JYPxA39Uh4Ykp1iOSErHA@public.gmane.orgm. > > > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > > 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-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > 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-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@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-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.