this帖子&它说数据库处理的参照完整性根本不是Rails方式。
但请考虑一下:
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
在这里,我需要创建一个新用户&amp;执行以下规则
users.department_id
应与departments.id
users.department_id
与departments.id
不匹配,则不应创建记录&amp;提出错误。 现在,如何以rails方式完成此操作?或者通过在迁移中删除原始SQL来添加外键只是一种方法?
答案 0 :(得分:1)
在Rails中,您只需将其添加到您的用户模型中:
validates_presence_of :department
Rails将在允许保存操作之前检查有效的部门。如果您愿意,您也可以像外国人一样使用宝石来为表添加外键。我通常这样做是因为我不可避免地发现自己需要在某个时刻直接批量加载数据。
答案 1 :(得分:1)
如果Lukas的回答不能满足您的需求,您也可以在模型上保存钩子之前/之后使用
class User < ActiveRecord::Base
before_save :validate_department
def validate_department
#validate the department
#raise an error if invalid?
end
end