This is pretty simple, but I must be missing the obvious. I''ve got a table that''s similar to this: USERS: - id int - username varchar(64) - password varchar(64) - role_id int ROLES: - id int - description varchar(16) I''ve had no troubles doing has_many relationships at all. But I want to map the user.role directly to the role model automatically (which sounds like it should be really simple). Right now if I look at the user''s attributes the correct role_id is shown, but I get a no method error if I try and access user.role. Do I need to do anything to tell rails to create a role model for the user? -- Posted via http://www.ruby-forum.com/.
OK, well I got it to work by changing the table format and removing the role_id from the USERS table and adding a user_id to the ROLES table then adding a has_one :role to the user model. But is there not a way for it to map by using the role_id in the USERS table? Since its a one-to-one relationship I don''t see the point of having a row in the ROLES table for each user when all I really need is a single column in the USERS table. The Barge wrote:> This is pretty simple, but I must be missing the obvious. I''ve got a > table that''s similar to this: > > USERS: > - id int > - username varchar(64) > - password varchar(64) > - role_id int > > ROLES: > - id int > - description varchar(16) > > I''ve had no troubles doing has_many relationships at all. But I want to > map the user.role directly to the role model automatically (which sounds > like it should be really simple). Right now if I look at the user''s > attributes the correct role_id is shown, but I get a no method error if > I try and access user.role. > > Do I need to do anything to tell rails to create a role model for the > user?-- Posted via http://www.ruby-forum.com/.
You need to use has_one instead of has_many -- -- Tom Mornini On Apr 10, 2006, at 7:14 AM, The Barge wrote:> OK, well I got it to work by changing the table format and removing > the > role_id from the USERS table and adding a user_id to the ROLES table > then adding a has_one :role to the user model. > > But is there not a way for it to map by using the role_id in the USERS > table? Since its a one-to-one relationship I don''t see the point of > having a row in the ROLES table for each user when all I really > need is > a single column in the USERS table. > > The Barge wrote: >> This is pretty simple, but I must be missing the obvious. I''ve got a >> table that''s similar to this: >> >> USERS: >> - id int >> - username varchar(64) >> - password varchar(64) >> - role_id int >> >> ROLES: >> - id int >> - description varchar(16) >> >> I''ve had no troubles doing has_many relationships at all. But I >> want to >> map the user.role directly to the role model automatically (which >> sounds >> like it should be really simple). Right now if I look at the user''s >> attributes the correct role_id is shown, but I get a no method >> error if >> I try and access user.role. >> >> Do I need to do anything to tell rails to create a role model for the >> user? > > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails
Yeah that''s how I ended up fixing the problem, but has_one requires a user_id field in the ROLES table. This means for each user in the database there is a row in the ROLES table. Since this is one-to-one it would be better (IMHO) to have a single ROLE_ID in the USERS table, and only have one row per role in the ROLES table. This would mean just one additional smallint column the the USERS table and the ROLES table would be nice and small and wouldn''t grow (unless I added more roles). Tom Mornini wrote:> You need to use has_one instead of has_many > > -- > -- Tom Mornini-- Posted via http://www.ruby-forum.com/.
When you set up your associations, make the one that you want to have the foreign key ''belongs_to'' the one it is associated with. In your case, user_table :id end role_table :user_id end then your user should ''belongs_to :role'' and role should ''has_many :users'' or ''has_one :user'' If each user can have one role, but multiple users can have the same role, then you need a ''has_many'' for the role. On Monday, April 10, 2006, at 8:19 AM, Tom Mornini wrote:>You need to use has_one instead of has_many > >-- -- Tom Mornini > >On Apr 10, 2006, at 7:14 AM, The Barge wrote: > >> OK, well I got it to work by changing the table format and removing > the >> role_id from the USERS table and adding a user_id to the ROLES table >> then adding a has_one :role to the user model. >> >> But is there not a way for it to map by using the role_id in the USERS >> table? Since its a one-to-one relationship I don''t see the point of >> having a row in the ROLES table for each user when all I really > need is >> a single column in the USERS table. >> >> The Barge wrote: >>> This is pretty simple, but I must be missing the obvious. I''ve got a >>> table that''s similar to this: >>> >>> USERS: >>> - id int >>> - username varchar(64) >>> - password varchar(64) >>> - role_id int >>> >>> ROLES: >>> - id int >>> - description varchar(16) >>> >>> I''ve had no troubles doing has_many relationships at all. But I >>>>> want to >>> map the user.role directly to the role model automatically (which >>>>> sounds >>> like it should be really simple). Right now if I look at the user''s >>> attributes the correct role_id is shown, but I get a no method >> >>>error if >>> I try and access user.role. >>> >>> Do I need to do anything to tell rails to create a role model for the >>> user? >> >> >> -- >> Posted via http://www.ruby-forum.com/. >> _______________________________________________ >> Rails mailing list >> Rails@lists.rubyonrails.org >> http://lists.rubyonrails.org/mailman/listinfo/rails > >_______________________________________________ >Rails mailing list >Rails@lists.rubyonrails.org >http://lists.rubyonrails.org/mailman/listinfo/rails_Kevin -- Posted with http://DevLists.com. Sign up and save your mailbox.
On Apr 10, 2006, at 8:19 AM, Tom Mornini wrote:> On Apr 10, 2006, at 7:14 AM, The Barge wrote: > >> OK, well I got it to work by changing the table format and >> removing the >> role_id from the USERS table and adding a user_id to the ROLES table >> then adding a has_one :role to the user model. >> >> But is there not a way for it to map by using the role_id in the >> USERS >> table? Since its a one-to-one relationship I don''t see the point of >> having a row in the ROLES table for each user when all I really >> need is >> a single column in the USERS table. >> >> The Barge wrote: >>> This is pretty simple, but I must be missing the obvious. I''ve >>> got a >>> table that''s similar to this: >>> >>> USERS: >>> - id int >>> - username varchar(64) >>> - password varchar(64) >>> - role_id int >>> >>> ROLES: >>> - id int >>> - description varchar(16) >>> >>> I''ve had no troubles doing has_many relationships at all. But I >>> want to >>> map the user.role directly to the role model automatically (which >>> sounds >>> like it should be really simple). Right now if I look at the user''s >>> attributes the correct role_id is shown, but I get a no method >>> error if >>> I try and access user.role. >>> >>> Do I need to do anything to tell rails to create a role model for >>> the >>> user? > > You need to use has_one instead of has_manyOops, my advice was wrong. You want belongs_to. -- -- Tom Mornini
Kevin Olbrich wrote:> When you set up your associations, make the one that you want to have > the foreign key ''belongs_to'' the one it is associated with. > > In your case, > > user_table > :id > end > > role_table > :user_id > end > > then your user should ''belongs_to :role'' and role should ''has_many > :users'' or ''has_one :user'' > > If each user can have one role, but multiple users can have the same > role, then you need a ''has_many'' for the role.Hah, I knew it would be something simple. I typo''d and had the belongs_to and has_many in the wrong models. Thanks. -- Posted via http://www.ruby-forum.com/.