belongs_to not working as

34 views
Skip to first unread message

mohitnegi

unread,
Sep 16, 2011, 8:56:59 AM9/16/11
to rubyonra...@googlegroups.com
Hi,

I have a model tests_user and score which are associated with each other by has_one and belongs_to association.

class TestsUser < ActiveRecord::Base
has_one :score, :foreign_key => :reg_no
end

class TestsUser < ActiveRecord::Base
        belongs_to :tests_user, :foreign_key => :reg_no
end

where reg_no is a unique field in both the table!

   score = Score.find(:first) gives me the first record from score table

Now as i do score.tests_user it gives nill.

and same with if i do
   test_user = TestsUser.find(:first)
 then test_user.score is showing as nil...


Is this issue because of the foreign_key is not the default id!!!!




Mathew Vivek

unread,
Sep 16, 2011, 9:31:20 AM9/16/11
to rubyonra...@googlegroups.com
class TestUser
has_one :score
end

class Score
belongs_to :test_user
end

score table will has id,test_user_id,score

if you want to get a user score

just give test_user.score

--
Posted via http://www.ruby-forum.com/.

Colin Law

unread,
Sep 16, 2011, 10:46:44 AM9/16/11
to rubyonra...@googlegroups.com
On 16 September 2011 13:56, mohitnegi <mohit...@gmail.com> wrote:
> Hi,
> I have a model tests_user and score which are associated with each other by
> has_one and belongs_to association.
> class TestsUser < ActiveRecord::Base
> has_one :score, :foreign_key => :reg_no
> end
> class TestsUser < ActiveRecord::Base

That should be class Score.

>         belongs_to :tests_user, :foreign_key => :reg_no
> end
> where reg_no is a unique field in both the table!

You only need reg_no in the scores table

>    score = Score.find(:first) gives me the first record from score table
>
> Now as i do score.tests_user it gives nill.
> and same with if i do
>    test_user = TestsUser.find(:first)
>  then test_user.score is showing as nil...
>
> Is this issue because of the foreign_key is not the default id!!!!

There should be no problem with a non-default foreign key. What do
you see if you do
score = Score.find(:first).reg_no
It should be an id of a TestsUser

Colin

--
gplus.to/clanlaw

Frederick Cheung

unread,
Sep 17, 2011, 4:31:25 AM9/17/11
to Ruby on Rails: Talk


On Sep 16, 1:56 pm, mohitnegi <mohitneg...@gmail.com> wrote:
> Hi,
>
> I have a model tests_user and score which are associated with each other by
> has_one and belongs_to association.
>
> class TestsUser < ActiveRecord::Base
> has_one :score, :foreign_key => :reg_no
> end
>
> class TestsUser < ActiveRecord::Base
>         belongs_to :tests_user, :foreign_key => :reg_no
> end
>
> where reg_no is a unique field in both the table!

In addition to what colin has said, with what you have there rails
will assume there is a reg_no column on the tests_user table which
references the id column on the other table. If it needs to point at a
column other that id then you need to use the primary_key option in
addition to the foreign_key option.

Fred
>
>    score = Score.find(:first) gives me the first record from score table
>
> *Now as i do score.tests_user it gives nill.*
>
> and same with if i do
>    test_user = TestsUser.find(:first)
> * then test_user.score is showing as nil...*
> *
> *
> *
> *

mohitnegi

unread,
Sep 19, 2011, 1:14:13 AM9/19/11
to rubyonra...@googlegroups.com
Thanks all,

Actually reg_no column is present in both the models.
and was not mentioned as primary key in any of the model.

Thanks Colin , Fred for the quick response!!
Reply all
Reply to author
Forward
0 new messages