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.