如果我定义一个模型,其中一个Customer
“有很多”和“属于”的,在 Rails 中我们谈论有一个外键,但我们并不是说这在数据库中是强制的。Order
Customer
Orders
Order
Customer
Order
Customer
customer_id
因为 Rails 没有将此定义为数据库级别的约束,所以可能存在违反数据完整性的风险,可能在应用程序外部(或者如果您同时收到请求,则在内部?),除非您在数据库中手动强制执行该约束。
为什么 Rails 不在数据库级别定义外键,或者有没有办法让 Rails 做到这一点?
class Customer < ActiveRecord::Base
has_many :orders
end
class Order < ActiveRecord::Base
belongs_to :customer
end
ActiveRecord::Schema.define(:version => 1) do
create_table "customers", :force => true do |t|
t.string "name"
end
create_table "orders", :force => true do |t|
t.string "item_name"
t.integer "customer_id"
end
end