I have two models called entity and user. The entities table has a column called users_id that contains the user id of the user that created the entity. In entity I have... has_one :user ... as I want to be able to show the user who created the entity from the entity object. But this produces the following error... Mysql::Error: #42S22Unknown column ''users.entity_id'' in ''where clause'': SELECT * FROM users WHERE (users.entity_id = 1) LIMIT 1 ...Where I want it to select users by users.id. What do I do? I bet it is easy. Martin -- Posted via http://www.ruby-forum.com/.
On 1/31/06, linus1412 <linus141275@hotmail.com> wrote:> I have two models called entity and user. > > The entities table has a column called users_id that contains the user > id of the user that created the entity. > > In entity I have... > > has_one :user > > ... as I want to be able to show the user who created the entity from > the entity object. > > But this produces the following error... > > Mysql::Error: #42S22Unknown column ''users.entity_id'' in ''where clause'': > SELECT * FROM users WHERE (users.entity_id = 1) LIMIT 1 > > ...Where I want it to select users by users.id. > > What do I do? I bet it is easy. > > MartinAs a newbie I had a similar issue and I just added the belongs_to tag to my entity model. It definately feels wrong in my case to say that an entity belongs_to a status, but it was the only thing I found to make the code work. (Or I could directly code in a find() call). I know that a One-to-Many relationship is mathematically equivalent to a Many-to-One relationship but I personally think there should be a belongs_to alias that makes sense for the Many-to-One case. Maybe "Contains_one" or something similar. ie. "Entity belongs_to status" is hard for my brain to parse. "Entity contains_one status" makes much more sense. I''m fully aware the underlying relationship is the same so this is simply a matter of having an alias for belongs_to. Greg -- Greg Freemyer The Norcross Group Forensics for the 21st Century
On Jan 31, 2006, at 10:22 AM, linus1412 wrote:> I have two models called entity and user. > > The entities table has a column called users_id that contains the user > id of the user that created the entity. > > In entity I have... > > has_one :user >That''s your problem right there. If a user creates and entity, then the entity belongs_to the user, and the user might create a lot of entities, so the user has_many :entities. However, if you have the restriction that a user can only create one entity, then you would say that the user has_one entity. Thus, your entity model should say... belongs_to :user -Derrick Spell "[The Perl source is] an interconnected mass of livers and pancreas and lungs and little sharp pointy things and the occasional exploding kidney." -Nat Torkington
Plug: I wrote a small tutorial explaining has_many and belongs_to. Check it out. http://www.rabbitcreative.com/articles/2006/01/22/ruby-on-rails-active-record-tutorial-part-one-has-or-belongs - Rabbit --- On 1/31/06, Derrick Spell <derrickspell@cdmplus.com> wrote:> On Jan 31, 2006, at 10:22 AM, linus1412 wrote: > > > I have two models called entity and user. > > > > The entities table has a column called users_id that contains the user > > id of the user that created the entity. > > > > In entity I have... > > > > has_one :user > > > > That''s your problem right there. If a user creates and entity, then > the entity belongs_to the user, and the user might create a lot of > entities, so the user has_many :entities. However, if you have the > restriction that a user can only create one entity, then you would > say that the user has_one entity. > > Thus, your entity model should say... > > belongs_to :user > > > -Derrick Spell > > "[The Perl source is] an interconnected mass > of livers and pancreas and lungs and little > sharp pointy things and the occasional > exploding kidney." -Nat Torkington > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >
linus1412 wrote:> I have two models called entity and user. > > The entities table has a column called users_id that contains the user > id of the user that created the entity. > > In entity I have... > > has_one :user > > ... as I want to be able to show the user who created the entity from > the entity object. > > But this produces the following error... > > Mysql::Error: #42S22Unknown column ''users.entity_id'' in ''where clause'': > SELECT * FROM users WHERE (users.entity_id = 1) LIMIT 1 > > ...Where I want it to select users by users.id. > > What do I do? I bet it is easy. > > MartinThe convention is that the model with the foreign key reference ''belongs_to'' the model it points to. So your entity table should have a ''user_id'' column, and your ''entity'' model ''belongs_to :user''. _Kevin -- Posted via http://www.ruby-forum.com/.