1

与这个问题非常相似,但并不完全相同。

我有音乐家和乐器模型:

# musician.rb
class Musician < ActiveRecord::Base
  attr_accessible :instrument_attributes
  has_many :instrument_choices
  has_many :instruments, through: instrument_choices
  accepts_nested_attributes_for :instruments # with some other stuff
end

# instrument.rb
class Instrument < ActiveRecord::Base
  has_many :inverse_instrument_choices, class_name: "InstrumentChoice"
  has_many :musicians, through: :inverse_instrument_choices
  validates_uniqueness_of :name

# instrument_choice.rb
class InstrumentChoice < ActiveRecord::Base
  belongs_to :musician
  belongs_to :instrument
  validates_uniqueness_of :musician_id, scope: :instrument_id

我有一个可能的工具的静态列表,用户在新视图和编辑视图中的选择表单中从该列表中进行选择。假设所有这些工具都有现有记录。我如何处理在音乐家和乐器之间添加新的关联?

谢谢!

4

1 回答 1

2

您可以InstrumentChoice通过关联或直接创建记录来创建:

musician.instrument_choices.create(instrument: an_instrument)
# or
InstrumentChoice.create(musician: a_musician, instrument: an_instrument)

由于您实际上并没有在其中存储任何其他信息,InstrumentChoice因此可以使用不需要自己的模型的简单连接表:

class Musician < ActiveRecord::Base
  has_and_belongs_to_many :instruments
end

class Instrument < ActiveRecord::Base
  has_and_belongs_to_many :musicians
end

musician.instruments << an_instrument

为了确保唯一性,您可以向连接表添加唯一约束。

于 2012-11-12T07:32:33.117 回答