web-dev-qa-db-fra.com

t.belongs_to dans la migration

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?

39
Tyler DeWitt

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

57
Justin Herrick
$ 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

12
shilovk

Oui, c'est un alias; Il peut également s'écrire t.references category.

11
Baldrick

add_belongs_to(table_name, *agrs) est ce que vous recherchez. Vous pouvez lire sur ici

1
Bubunyo Nyavor

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    |                |
+-------------+---------------+------+-----+---------+----------------+
0
mwfearnley