I have the following models:
class Programme < ActiveRecord::Base
has_and_belongs_to_many :nationalities, class_name: 'Nation', join_table: 'nationalities_nations'
has_and_belongs_to_many :destinations, class_name: 'Nation', join_table: 'destinations_nations'
accepts_nested_attributes_for :nationalities
accepts_nested_attributes_for :destinations
end
and
class Nation < ActiveRecord::Base
has_and_belongs_to_many :nationality_programmes, class_name: 'Programme', join_table: 'nationalities_nations'
has_and_belongs_to_many :destination_programmes, class_name: 'Programme', join_table: 'destinations_nations'
accepts_nested_attributes_for :nationality_programmes
accepts_nested_attributes_for :destination_programmes
end
In active admin I have the following configuration which pre-selects any existing stored country references correctly (See screenshot).
ActiveAdmin.register Programme do
permit_params :title,
destinations_ids: [:id],
nationalities_ids: [:id]
form do |f|
f.actions
f.inputs 'Countries / Regions' do
f.input :nationalities, :as => :select, :input_html => {:multiple => true}
f.input :destinations, :as => :select, :input_html => {:multiple => true}
f.input :title
end
f.actions
end
end
However, when I select other countries, the form successfully saves, but the references aren’t stored.
This is my schema:
ActiveRecord::Schema.define(version: 20140522131219) do
create_table "destinations_nations", force: true do |t|
t.integer "programme_id", null: false
t.integer "nation_id", null: false
end
create_table "levels_programmes", force: true do |t|
t.integer "programme_id", null: false
t.integer "level_id", null: false
end
create_table "nationalities_nations", force: true do |t|
t.integer "programme_id", null: false
t.integer "nation_id", null: false
end
create_table "nations", force: true do |t|
t.string "slug", limit: 2
t.string "name"
end
create_table "programmes", force: true do |t|
t.string "title"
end
end
Update: Cross-posted this issue on active_admin#3196 which is now closed, thanks to Gregorio's help.