У меня есть следующие модели:
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
и
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
В активном admin у меня есть следующая конфигурация, которая предварительно правильно выбирает любые существующие ссылки хранимых стран (см. снимок экрана).
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
Однако, когда я выбираю другие страны, форма успешно сохраняет, но сохраняются ссылки arent.
Это моя схема:
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
Обновление. Перекрестная ссылка на active_admin # 3196, которая теперь закрыта, благодаря помощи Грегорио.