1. ホーム
  2. ruby-on-rails

[解決済み] railsでhas_many :through アソシエーションにレコードを追加する方法

2022-12-12 08:21:31

質問

class Agents << ActiveRecord::Base
  belongs_to :customer
  belongs_to :house
end

class Customer << ActiveRecord::Base
  has_many :agents
  has_many :houses, through: :agents
end

class House << ActiveRecord::Base
  has_many :agents
  has_many :customers, through: :agents
end

どのようにすれば Agents のモデルを Customer ?

これがベストな方法でしょうか?

Customer.find(1).agents.create(customer_id: 1, house_id: 1)

上記はコンソールからは問題なく動作しますが、実際のアプリケーションではどのように実現すればいいのかわかりません。

顧客のためにフォームが入力され、そのフォームには house_id を入力として受け取るとします。その場合、コントローラで次のようにすればよいでしょうか。

def create 
  @customer = Customer.new(params[:customer])
  @customer.agents.create(customer_id: @customer.id, house_id: params[:house_id])
  @customer.save
end

全体として、私は、レコードを has_many :through テーブルのレコードを追加する方法がわかりません。

どのように解決する?

単純に、こうすればいいのではないでしょうか。

 @cust = Customer.new(params[:customer])
 @cust.houses << House.find(params[:house_id])

あるいは、お客さんのために新しい家を作るとき。

 @cust = Customer.new(params[:customer])
 @cust.houses.create(params[:house])

ID経由で追加することも可能です。

@cust.house_ids << House.find(params[:house_id])