2012-02-27 35 views
31

Tôi đã sử dụng số source code for railscasts # 141 của Ryan Bates để tạo giỏ hàng đơn giản. Trong một trong những cuộc di cư, ông liệt kêt.belongs_to trong di chuyển

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 

Dưới đây là mô hình sản phẩm:

class Product < ActiveRecord::Base 
belongs_to :category 
end 

dòng t.belongs_to :category là gì? Đó có phải là bí danh cho t.integer category_id không?

Trả lời

44

t.belongs_to :category chỉ là special helper method đường ray đi qua trong liên kết.

Nếu bạn nhìn vào source codebelongs_to thực sự là một bí danh của references

10

Vâng, đó là bí danh; Nó cũng có thể được viết t.references category.

+0

Hầu. 't.references' bây giờ cũng thêm ràng buộc khóa ngoài. https://apidock.com/rails/ActiveRecord/ConnectionAdapters/Table/references –

1

add_belongs_to(table_name, *agrs) là những gì bạn đang tìm kiếm. Bạn có thể đọc về here

0

Có, t.belongs_to :category line hoạt động như một bí danh cho t.integer category_id.

Trong MySQL, sự di cư được tôi một bảng như thế này (lưu ý các lĩnh vực category_id vào hàng thứ hai):

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