Подтвердить что ты не робот

T.belongs_to при миграции

Я использовал Ryan Bates исходный код для railscasts # 141, чтобы создать простую корзину покупок. В одной из миграций он перечисляет

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

Вот модель продукта:

class Product < ActiveRecord::Base
 belongs_to :category
end

Что такое строка t.belongs_to :category? Это псевдоним для t.integer category_id?

4b9b3361

Ответ 2

Да, это псевдоним; Его также можно записать t.references category.

Ответ 4

add_belongs_to(table_name, *agrs) - это то, что вы ищете. Вы можете прочитать здесь

Ответ 5

Да, t.belongs_to :category действует как псевдоним для t.integer category_id, так как он вызывает создание поля с соответствующим типом category_id.

В MySQL при миграции получается такая таблица (обратите внимание на поле category_id во второй строке):

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