has_and_belongs_to_many

多対多の関連を宣言(has_and_belongs_to_many)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

説明

多対多の関連を表現するときに使用

使い方

rails3
has_and_belongs_to_many(関連モデル名 [, オプション])
rails4
has_and_belongs_to_many(関連モデル名 [, scope, オプション])

オプション

オプション説明バージョン
:class_name関連モデルのクラス名を指定
関連モデル名から推測できない場合のみ指定
:join_table結合テーブルの名前を指定
:foreign_key多対多の関連で使用する外部キーの名前を指定
:association_foreign_key多対多の関係で関連先への外部キーを指定
:readonly関連先のオブジェクトを読み取り専用にするか
:validate現在のモデルを保存する場合、関連先の検証を実行
:autosave親モデルに合わせて、保存や削除を行うか
:conditions関連モデルを取得する際の条件式を指定rails3まで
:counter_sql関連の大きさを指定するためのSQL文を指定rails3まで
:delete_sql関連を削除するためのSQL文を指定rails3まで
:extendプロキシを拡張するためのモジュールrails3まで
:finder_sql関連を取得SQL文を指定rails3まで
:group結果をグループ化rails3まで
:include2次の関連も取得するかrails3まで
:insert_sql関連を追加するためのSQL文を指定rails3まで
:limit取得する関連モデルの上限を指定rails3まで
:offset取得する関連モデルの開始位置を指定rails3まで
:order関連先オブジェクトの取得順序を指定rails3まで
:select関連先オブジェクトの取得例を指定rails3まで
:uniq重複した関連を無視するかrails3まで

使えるようになるメソッド

メソッド説明
collection(force_reload = false)多対多でひも付いた先のモデルである一覧を取得
collection<<(object, …)1つ以上のモデルを多対多の関連に追加
collection.delete(object, …)1つ以上のモデルを多対多の関連から外す
collection.destroy(object, …)1つ以上のモデルを多対多の関連から外す
collection=objects多対多でひも付いたモデルを更新
collection_singular_ids多対多でひも付いたモデルのidの配列を取得
collection_singular_ids=ids多対多でひも付いたモデルのidが指定された物に更新
collection.clear多対多の関連をすべて削除
collection.empty?多対多の関連にあるモデルが1つもないときにtrue
collection.size多対多でひも付いたモデル数を返す
collection.find(id)多対多の関連モデルでfindを実行
collection.exists?(…)与えられた条件に一致するモデルが存在するか確認
collection.build(attributes = {})新しいモデルを作り、多対多で関連付けるがDBは更新しない
collection.create(attributes = {})新しいモデルを作り、多対多で関連付けてDBを更新

UserとProjectの関係
マイグレーションファイル
class CreateUsersProjectsTable < ActiveRecord::Migration
  def self.up
    create_table :users_projects, :id => false do |t|
      t.integer :user_id
      t.integer :project_id
    end
  end
  def self.down
    drop_table :users_projects
  end
end
Userモデル
class User < ActiveRecord::Base
  has_and_belongs_to_many :projects
end
Projectモデル
class Project < ActiveRecord::Base
  has_and_belongs_to_many :users
end

ソースコード

ソースコード検索