0

この投稿に出くわし、DBによって処理される参照整合性は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、レコードを作成してエラーを発生させないでください。

さて、どうすればこれをレールの方法で達成できますか?または、移行時に生のSQLをドロップして外部キーを追加することが唯一の方法ですか?

4

2 に答える 2

1

Rails では、これを User モデルに追加するだけです。

validates_presence_of :department

Rails は、保存操作を許可する前に、有効な部門をチェックします。必要に応じて、foreigner のような gem を使用してテーブルに外部キーを追加することもできます。ある時点で必然的にデータを直接一括ロードする必要があるため、私は通常これを行います。

于 2012-05-30T13:48:17.130 に答える
1

Lukas の回答がニーズに合わない場合は、モデルの保存前後のフックを使用することもできます

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 に答える