読者です 読者をやめる 読者になる 読者になる

dm-constraints(v1.2.0)のREADMEの日本語訳

試しに訳してみた。 訳は適当なので間違ってるところもあると思う。

dm-constraints

DataMapperのアソシエーションに外部キー制約を追加するプラグインです。 現在はPostgreSQLMySQLのみサポートしています。

全ての制約は基礎となるデータベースに追加されますが、制約はピュアRubyで実装されています。

制約

- :protect     子供のレコードが存在する場合、destroyした時にfalseを返す
- :destroy     子供が存在する場合、削除する
- :destroy!    全てのフックを迂回する為に、リソースのインスタンス化を行わずに直接子を削除する
               #destroy! はdm-masterのResorcesをサポートしていないため、1対1関連はサポートしていません
- :set_nil     子のアソシエーションのparent idにnilを設定します
               重複したレコードを作成してしまうため、多対多関連には有効ではありません(specsの説明を参照)
- :skip        子供に何も行いません。結果として孤立したレコードが出来ます

デフォルトは :protect で関連は自分の子供を保護します。

カーディナリティノート

* 1:1
 * 適用可能な制約: [:set_nil, :skip, :protect, :destroy]

* 1:M
 * 適用可能な制約: [:set_nil, :skip, :protect, :destroy, :destroy!]

* M:M
 * 適用可能な制約: [:skip, :protect, :destroy, :destroy!]

# 1:M Example
class Post
  has n, :comments
  # これは次と同じです:
  # has n, :comments, :constraint => :protect
end

# M:M Example
class Article
  has n, :tags, :through => Resource, :constraint => :destroy
end

class Tags
  has n, :articles, :through => Resource, :constraint => :destroy
end

# :through => Resource を利用する関連の仲介の制約
# は自動的に多対多関連の制約から継承されます。

# 1:1 Example
class User
  has 1, :address, :constraint => :protect
end