depts
- depts_orders
- orders
のようなManyToManyのテーブルで、depts.id
が1 or 2 or 3と関連づくorderを検索する場合
Order.joins(:depts).where(depts: {id: [1,2,3]})
のようにやれば良いと思いますが、depts.id
が1、2、3の全てと関連づくorderを検索する場合はどうやってActiveRecordで表現したら良いのでしょうか。
下記は私の環境のmigrateファイルとmodelの例です。
中間テーブルのモデルファイルはつくらず、has_and_belongs_to_many
を使っています。
migrateファイル
- db/migrate/XXXXX_create_depts.rb
class CreateDepts < ActiveRecord::Migration[5.1] def change create_table :depts do |t| t.string :dept_name, comment: '部門名' end end end
- db/migrate/XXXXX_create_orers.rb
class CreateOrders < ActiveRecord::Migration[5.1] def change create_table :orders do |t| t.string :order_number, comment: 'オーダ番号' end end end
- db/migrate/XXXXX_create_depts_orders.rb
class CreateDeptsOrders < ActiveRecord::Migration[5.1] def change create_table :depts_orders, id: false do |t| t.references :dept, foreign_key: true, null: false, comment: '部門FK' t.references :order, foreign_key: true, null: false, comment: 'オーダFK' end end end
Model
- app/models/dept.rb
class Dept < ApplicationRecord has_and_belongs_to_many :orders end
- app/models/order.rb
class Order < ApplicationRecord has_and_belongs_to_many :depts end
あなたの回答
tips
プレビュー