Rails 多对多的嵌套属性

Rails nested attributes for many to many

您好,我正在尝试使用嵌套属性实现一项功能。在创建让分盘(为客户)的表单中,我想显示所有客户联赛的列表,当在创建操作中提交表单时,我将使用@handicap.save,这将创建两者之间的关联还有让分盘和联赛(在表格中选择的联赛)。

我找到的唯一解决方案是不使用嵌套属性。 在新方法中,我会从客户那里获取所有障碍并将它们显示在表格中。因此,当在创建操作中提交表单时,我会进行验证..,为客户创建@handicap 记录,然后 手动为来自我将创建关联的表单中的每个联盟 ID。

#New/Create actions in the handicaps controller

def new
  @leagues = @customer.leagues
end

def create
  handicap = @customer.handicaps.build(handicap_params)
  if handicap.save
    associations = []
    params[:league_ids].each do |id|
      associations << LeagueHandicap.new(handicap_id: @handicap.id, league_id: id)
    end
    LeagueHandicap.import(associations)
  end
end

我想 handicap.save 并自动创建 LeagueHandicap 协会。但是我不知道如何使用嵌套属性来做到这一点。可以这样吗?

我有以下型号:

class Customer < ActiveRecord::Base
  has_many :handicaps, dependent: :destroy
  has_many :leagues, dependent: :destroy
end

class Handicap < ActiveRecord::Base
  belongs_to :customer
  has_many :league_handicaps
  has_many :leagues, through: :league_handicaps, dependent: :destroy
end

class LeagueHandicap < ActiveRecord::Base
  belongs_to :handicap
  belongs_to :league
end

class League < ActiveRecord::Base
  has_many :league_handicaps
  has_many :handicaps, through: :league_handicaps, dependent: :destroy
end

(通过LeagueHandicap,Handicap和League之间存在多对多关系)

如果您允许 league_ids rails 应该为您添加它们。你需要告诉 rails 它是一个数组

def handicap_params
  params.require(:handicap).permit(league_ids: [])
end