Có sự khác biệt nào giữa việc sử dụng t.references
và thực hiện lệnh SQL
để tạo mối quan hệ khóa ngoài giữa products
và category
bảng như sau? Nói cách khác, là hai cách khác nhau để làm điều tương tự hoặc tôi thiếu bất cứ điều gì ở đây?Sự khác biệt giữa ràng buộc và tham chiếu khóa ngoài trong Rails
class ExampleMigration < ActiveRecord::Migration
def up
create_table :products do |t|
t.references :category
end
#add a foreign key
execute <<-SQL
ALTER TABLE products
ADD CONSTRAINT fk_products_categories
FOREIGN KEY (category_id)
REFERENCES categories(id)
SQL
add_column :users, :home_page_url, :string
rename_column :users, :email, :email_address
end
def down
rename_column :users, :email_address, :email
remove_column :users, :home_page_url
execute <<-SQL
ALTER TABLE products
DROP FOREIGN KEY fk_products_categories
SQL
drop_table :products
end
end
Rails 4.2 hiện hỗ trợ các ràng buộc khóa ngoài cho các bộ điều hợp hỗ trợ chúng: http://edgeguides.rubyonrails.org/4_2_release_notes.html#foreign-key-support –