1

Can't understand how Rails association with models works. Here is simple question:

There are two tables

products

id|   name  | status
1 | Tube    | 0
2 | Pillar  | 1
3 | Book    | 0
4 | Gum     | 1
5 | Tumbler | 2

statuses

status | name
0      | Unavailable
1      | In stock
2      | Discounted

With ~ same names for models and controllers.

I don't what to create new row in statuses table on every new product. And i want to show status name in erb. What should i write in models and in migration file (for example for which belong_to, has_one or has_many...)?

3 Answers3

0

Product should belongs_to :status and Status should has_many :products for a simple one-to-many association, and you aren't required to set a status for a product. In erb you'd use <%= @product.status.name %>. To set up those migrations, create_table :products do |t| t.string :name; t.integer :status_id; end and create_table :statuses do |t| t.string :name; end

more information here

9nonnatus
  • 142
  • 7
0

First of all for in accordance with rails conventions you need to rename product.status to product.status_id.

product belongs_to :status
status has_many :products

Product.find(1).status.name should be 'Unavailable'

antiqe
  • 1,129
  • 8
  • 17
0

If you understand the basics of relational database then it's pretty much the same thing.
When you say, status belongs_to :product and product has_many :statuses, it essentially means status table has a foreign key which you can use to retrieve all status rows for a given product id.

To establish this relationship, you'll need to create a new column product_id in your statuses table:

rails g migration AddProductIdToStatuses product_id:integer

Once done, add the following in your product.rb:

has_many :statuses

and this in your status.rb:

belongs_to :product
rb512
  • 6,594
  • 3
  • 34
  • 55
  • Or you can add a reference like said in this link: http://stackoverflow.com/a/16354779/2197555 – gm2008 Jul 13 '14 at 13:22