その他
    ホーム 技術発信 DoRuby Ruby On Rail 多対多のテーブルへの保存の仕方

    Ruby On Rail 多対多のテーブルへの保存の仕方

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    どもrickです。

    多対多のテーブルとは、
    ユーザーと特徴Tableがあるとして、ユーザーと特徴が互いに複数の値を参照するときに使います。
    例えは、ユーザーが複数の特徴を登録したいときに、ユーザーn対特徴*となる。
    ユーザーも1人ではないので、n対nとなる。
    このようなときに使用する。

    環境

    Rails2.1.1
    Postgres8.3.5

    設定

    名前は、DB1_DB2という命名規則になっている、DBの順番はあいうえお順

    $ruby script/generate migrate model1_model2 //modelはいらないので、migrateだけ作成
    db/migrateion/..

    def self.up
    create_table(:model1_model2, :id => false) do |t| //idは必要ないため消す
    t.integer :model1_id
    t.integer :model2_id
    end
    end

    双方のmodelに

    has_and_belongs_to_many :model名s //参照の値が複数だから複数形にする
    保存するほうのmodelに(1を使用して2を呼び出した時は、1が保存するほう)

    def model2_id=(value)
    small = MODEL2.find_by_id(value)
    selef.model2s << small
    end

    こんな風にすると値が自動に保存される。
    きものぶぶんは、selef.smodel2s << smallだとおもう

    更新する時、更新する方法はないとの事なので、
    一度削除してから入れ直すなどするのが良いと思う。

    以上。