QA@IT

rails 多対多(association)テーブルについて

3151 PV

現在多対多テーブルの勉強をしていて詰まってしまったので質問させて頂きます。
環境としてはrails4です。
作りたい機能としては、店舗には複数のユーザーが存在し、ユーザーは複数の店舗に属していて、その中でもメインの店舗を登録するという機能を作成したいと思っております。

今回の質問内容としては、ユーザーがメインで所属している店舗一件のみが返る(できればassociationの設定のみで)
方法がわからないため質問させて頂きました。

userテーブルとofficeテーブルの中間テーブルでoffices_usersテーブルがあります。
associationは以下の通りです。

class Office < ActiveRecord::Base
has_many :offices_users
has_many :users, through: :offices_users
end

class OfficesUser < ActiveRecord::Base
belongs_to :office
belongs_to :user
end

class User < ActiveRecord::Base
has_many :offices_users
has_many :offices, through: :offices_users
end

migratetionファイルは以下の通りです。

create_table :offices do |t|
t.integer :id
t.string :name
t.timestamps
end

create_table :users do |t|
  t.integer :id
  t.timestamps
end

create_table :offices_users do |t|
  t.belongs_to :office
  t.belongs_to :user
  t.boolean :is_main_office #メインオフィスのフラグ
end

やりたい事としては
user = User.first

user.offices => ユーザーが所属している店舗の一覧が返る(※上記設定で、user.officesは一覧が返るので問題なし)
user.office => ユーザーがメインに所属している店舗一件が返る
私のイメージ的にはuserモデルに「has_one」を追加してあげれば、「user.office」でメインに所属している店舗一件が返るのではないかと思っていたのですが、どう追加していいのかわからない為皆様のお力をお借りしたいとおもっております。どうかよろしくお願い致します。

ウォッチ

この質問への回答やコメントをメールでお知らせします。