Hey! I’m decent at Ruby, but pretty darn new to Rails. Working through some tutorial stuff, and don’t fully understand what direction to take. I want to create a one-to-many association; how do I accomplish this? Do I create the association with MySQL (the DB I’m using) first, and then just have Rails take advantage of it? Do I use “migration” (which I only kinda-sorta “get”)? Or is there some other mechanism entirely?
Apologies for how dumb this probably sounds; trying to get the full feel of Rails, and there are definitely some places I’m still not quite understanding the concepts.
In general you should make changes to your DB through migrations
only, so you can reverse, repeat, insure identical changes are made
to other (deployment) systems, etc.
You then need to run a migration on your cats table, to add the foreign key for owners, so Rails can build the associations. From the command line:
rails g migration add_owner_id_to_cats owner_id:integer
This should create a migration file (in the /db folder), with something like the following in it:
class AddFooToPosts < ActiveRecord::Migration
def change
add_column :cats, :owner_id, :integer # ie, table, field name, field type
end
end
then, run your migration.
rake db:migrate
Thanks to the convention over configuration approach, rails will automagically work out that owner_id is a foreign key to the owners table. from there, you’ll be able to access cats through owners, and owners through cats:
mog.owner # “Steve”
steve.cats.first # “Mog”
That, of course, is just the tip of the iceberg - you can define all kinds of odd relations, and customise them as much as you want.