Rails でのリレーション設定
外部キー参照でグダグダ悩んでたんだけど,
とりあえず 1:1, 1:n は理解できた.
1:1 対応の場合
例えば users テーブルと accounts テーブルで 1:1 対応する場合.
- users テーブルのモデル名は User
- accounts テーブルのモデル名は Account
- accounts テーブルに user_id を integer で作成しておく.
Migration スクリプトとしては
def self.up add_column(:accounts, :user_id, :intger) end def self.down remove_column(:accounts, :user_id) end
とか? でもって app/models/{user, account}.rb でもって
# app/models/user.rb class User < ActiveRecord::Base has_one(:account) end
と
# app/models/account.rb class Account < ActiveRecord::Base belongs_to(:user) end
ってするだけ.
- accounts テーブルで users にマッピングしている.
- Account クラスでは belongs_to(:user) に.
その一方で,
- User クラスでは has_one(:account) になる.
単数, 複数に注意すべし. <-この辺が Rails だわ.
1:n の場合
今, 手慰みに作成している論文データベースでは,
papers テーブルと journals テーブルに 1:n 対応をつけている.
この場合 papers に journal_id を作成しておいて(Migration でいける,SQL 文はとりあえずいらない), モデルを弄る.
# app/models/paper.rb class User < ActiveRecord::Base belongs_to(:journal) end
と
# app/models/journal.rb class Account < ActiveRecord::Base has_many(:papers) end
みたいに. has_many(:papers) ってのが肝かな.
…さて, 一応 m:n 対応の場合には has_and_belongs_to_many な訳ですが.
これでもって Paper と Author に対応させれば良いんでしょうけど.
明日やろう.