The has_many through setup detailed below allows me to do @system.software << and @software.systems << for establishing the relationships, using an array of software or system objects, respectively. This works out well because my form for software has a software_ids multi-select. The problem I have is that the join model has additional attributes to store. Can I use the above method and somehow also include the additional attributes or do I have to do x SystemSoftware.new... x.system_status = SystemStatus.find(params [:system_status_id]...etc.? System.rb has_many :system_software has_many :software, :through => :system_software Software.rb has_many :system_software has_many :software, :through => :system_software SystemSoftware.rb belongs_to :system belongs_to :software