Ответ 1
t.belongs_to :category
- это просто специальный вспомогательный метод рельсов, проходящих в ассоциации.
Если вы посмотрите в исходный код belongs_to
на самом деле является псевдонимом references
Я использовал 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
?
t.belongs_to :category
- это просто специальный вспомогательный метод рельсов, проходящих в ассоциации.
Если вы посмотрите в исходный код belongs_to
на самом деле является псевдонимом references
Да, это псевдоним; Его также можно записать t.references category
.
$ rails g migration AddUserRefToProducts user:references
это генерирует:
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
add_belongs_to(table_name, *agrs)
- это то, что вы ищете. Вы можете прочитать здесь
Да, 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 | |
+-------------+---------------+------+-----+---------+----------------+