J'utilisais Ryan Bates code source pour les diffusions sur rail # 141 afin de créer un panier d'achat simple. Dans l'une des migrations, il énumère
class CreateProducts < ActiveRecord::Migration
def self.up
create_table :products do |t|
t.belongs_to :category
t.string :name
t.decimal :price
t.text :description
t.timestamps
end
end
def self.down
drop_table :products
end
end
Voici le modèle du produit:
class Product < ActiveRecord::Base
belongs_to :category
end
Quel est le t.belongs_to :category
ligne? Est-ce un alias pour t.integer category_id
?
Le t.belongs_to :category
n'est qu'un méthode d'assistance spéciale de Rails passant dans l'association.
Si vous regardez dans le code sourcebelongs_to
est en fait un alias de references
$ Rails g migration AddUserRefToProducts user:references
cela génère:
class AddUserRefToProducts < ActiveRecord::Migration
def change
add_reference :products, :user, index: true
end
end
http://guides.rubyonrails.org/active_record_migrations.html#creating-a-standalone-migration
Oui, c'est un alias; Il peut également s'écrire t.references category
.
add_belongs_to(table_name, *agrs)
est ce que vous recherchez. Vous pouvez lire sur ici
Oui, t.belongs_to :category line
agit comme un alias pour t.integer category_id
.
Dans MySQL, la migration me donne une table comme celle-ci (notez le category_id
champ sur la deuxième ligne):
mysql> describe products;
+-------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| category_id | int(11) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| price | decimal(10,0) | YES | | NULL | |
| description | text | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
+-------------+---------------+------+-----+---------+----------------+