来自this后&它说DB处理的参照完整性根本不是Rails方式。Rails 3中的Postgresql参照完整性约束条件
但想一想:
class User < ActiveRecord::Base
belongs_to :department
end
class Department < ActiveRecord::Base
has_many :users
end
#User Model
id: integer, name: string,department_id: integer
#Department Model
id: integer, name: string
在这里,我需要创建一个新的用户&强制执行以下规则
- 用户应该被分配到一个部门
- 的
users.department_id
应该匹配departments.id
- if
users.department_id
与不匹配,不应创建记录&提出错误。
现在,我该如何在rails方式下完成这项工作?或者通过在迁移中删除原始SQL来添加外键是唯一的方法吗?允许保存操作之前
validates_presence_of :department
Rails会检查是否有一个有效的部门:
的‘Rails的方式’挂钩是头脑简单的,愚蠢的,并受竞争情况(其他中事情)。如果你关心你的数据,你会在数据库中使用真正的FK,[外国人](https://github.com/matthuhiggins/foreigner)会帮助你,直到Rails开始改变态度,良好的感觉。 –
是的,它似乎很奇怪,但嘿,铁轨是一个固执己见的软件:) – CuriousMind
但是他们的逻辑有漏洞,他们让他们的态度得到坚实的软件的方式。至少他们承认他们在[验证指南](http://guides.rubyonrails.org/active_record_validations_callbacks.html#why-use-validations)中唯一性的缺点。我已经看到了足够*不可能*事情发生得更好,我至少和Rails一样被认为是:) –