Best way to do this

I'm looking to give an object (buyer) a status. What's the best way to accomplish this? At the moment, I'm struggling to comprehend my way through the following:

1) Create a status model, then let the user add statuses as they see fit. These statuses can then be applied to a buyer. The buyer table will have a status_id column. This works fine, but I have a problem when I try to refer to the the status through a buyer.

buyer.status gives me the following error:

Unknown column 'statuses.buyer_id' in 'where clause': SELECT * FROM `statuses` WHERE (`statuses`.buyer_id = 12) LIMIT 1

I see what it's trying to do - go into the status column and find all statuses that have the buyer_id assigned. The problem is that I don't want a status to apply to only ONE buyer, I want them to be able to apply to multiple.

I'm sure I'm missing something in my routes, or just not understanding the relationship and how I need to instruct rails of this.

Can someone help me out? Thanks in advance for any time spent helping.

I'm beginning to think there needs to be a third table; one whose columns are:

id, buyer_id, status_id

This would be my first time doing it like this though, so I sort of get stuck understanding how the route is supposed to work.

Sounds like you do not have your associations defined correctly in your model.

In your Buyer model you should have this line:

    belongs_to :status

In your Status model you should have this line:

    has_many :buyers

HTH,

Jamey

Jamey Cribbs wrote:

Sounds like you do not have your associations defined correctly in your model.

In your Buyer model you should have this line:

    belongs_to :status

In your Status model you should have this line:

    has_many :buyers

HTH,

Jamey

That was it! Thank you so much. I was totally getting confused here:

belongs_to :status vs. has_one :status

Can you help me understand why it's belongs_to and not has_one? A status is part of a buyer, so I guess I just get confused on the logic.

The big difference between has_one and belongs_to is that ActiveRecord expects the model that uses the belongs_to to have a foreign key identifying the associated record in the other table. So, therefore you know you need to use a belongs_to in Buyer because that the buyers table is where you have defined the status_id field.

HTH,

Jamey

Steve Castaneda wrote:

Jamey Cribbs wrote:

Sounds like you do not have your associations defined correctly in your model.

In your Buyer model you should have this line:

    belongs_to :status

In your Status model you should have this line:

    has_many :buyers

HTH,

Jamey

That was it! Thank you so much. I was totally getting confused here:

belongs_to :status vs. has_one :status

Can you help me understand why it's belongs_to and not has_one? A status is part of a buyer, so I guess I just get confused on the logic.

has_one is just like has_many except for different cardinality: it means that this table doesn't contain the foreign key.

If you had read the docs for the Associations module, you would have seen this very point clearly explained.

Best,