rails:1708
From: hoti <hoti_jp@y...>
Date: Thu, 12 Oct 2006 14:46:43 +0900 (JST)
Subject: [rails:1708] Re: リレーションシップの外部参照 id が使えない
manakay さん、めちゃめちゃ、理解できました。 ありがとうございました! で、周辺をぐぐっていると、下のような議論を発見。 ・参照整合性制約は……つけたい派 http://capsctrl.que.jp/kdmsnr/diary/20060210.html#p01 ・参照整合性制約は……つけたくない派 http://d.hatena.ne.jp/babie/20060213/p3 http://shugo.net/jit/20060216.html#p01 私としては、migration + sqlite3 で行きたいので、manakayさんが一般的といわれている"参照整合 性制約……つけたくない派"で始めてみます。 http://techno.hippy.jp/rorwiki/?UsingMigrations(migrationではALTER TABLEする) http://donrails.araki.net/notes/id/5220(sqlite3ではALTER TABLEでCONSTRAINTできない) みなさん、ありがとうございました。 以上。 ----------------------- manakayさん wrote: > ところで、FKを使うのと、下のように"普通の列"とするのと基本的に同じ、という認識でよいので し > ょうか? Railsでリレーションシップを設定できるのは、ActiveRecordのオブジェクト間のリンク宣言だけです (つまり、has_one, has_many, habtmなど)。DDLでのFK指定は、Railsにとっては意味はありません。もちろん、データベ ースが参照先のキーをチェックしてくれるのでDDLでFK指定したほうがいいとは思いますが。 前のメールで私がFKと書いたのは、Railsが認識する参照キー、「モデル名_id」のことであって、デ ータベースの外部キー制約のことではありません。報知さんが読まれた「FKなしでidのみでOK」とい う記事でいうFKは、このデータベースの外部キー制約のことを指しているのだと思います。つまりDDL でFK指定をしなくとも、オブジェクトレベルでリレーションシップを設定することができて、それは 規約に従えば「モデル名_id」でOKだということを言っているのだと思います。 Railsでリレーションシップを設定するのならば、下記のやり方でOKです。というか、下記のやり方 が一般的だと思います。 > ーーーーー > class User < ActiveRecord::Base > # I reference an account. > belongs_to :account > end > > class Account < ActiveRecord::Base > # One user references me. > has_one :user > end > > The tables for these classes could look something like: > > CREATE TABLE users ( > id int(11) NOT NULL auto_increment, > account_id int(11) default NULL, > name varchar default NULL, > PRIMARY KEY (id) > ) > > CREATE TABLE accounts ( > id int(11) NOT NULL auto_increment, > name varchar default NULL, > PRIMARY KEY (id) -------------------------------------- [10th Anniversary] special auction campaign now! http://pr.mail.yahoo.co.jp/auction/ -- ML: rails@r... 使い方: http://QuickML.com/