0

看到这篇文章,它说数据库处理的引用完整性根本不是 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

在这里我需要创建一个新用户并执行以下规则

  • 用户应该被分配到一个部门
  • 应该users.department_id匹配departments.id
  • 如果users.department_id与 不匹配departments.id,则不应创建记录并引发错误。

现在,我如何以 Rails 方式完成此任务?或者通过在迁移中删除原始 SQL 添加外键是唯一的方法?

4

2 回答 2

1

在 Rails 中,您只需将其添加到您的用户模型中:

validates_presence_of :department

Rails 将在允许保存操作之前检查有效的部门。如果您愿意,您也可以使用像外国人这样的 gem 将外键添加到您的表中。我通常这样做是因为我不可避免地发现自己需要在某些时候直接批量加载数据。

于 2012-05-30T13:48:17.130 回答
1

如果 Lukas 的回答不符合您的需求,您也可以在模型上使用 before/after save hooks

class User < ActiveRecord::Base

  before_save :validate_department

  def validate_department
     #validate the department
     #raise an error if invalid?
  end

end
于 2012-05-30T14:18:43.927 回答