Редактирование связи родительской записи в activeadmin

#ruby-on-rails #activeadmin #has-many-through #has-and-belongs-to-many

#ruby-on-rails #activeadmin #имеет много сквозных #имеет-и-принадлежит-многим

Вопрос:

У меня следующая структура модели:

  • Composition имеет много Score ( Score принадлежит Composition )
  • Composition имеет и принадлежит многим Countries (и наоборот)

score.rb:

 class Score < ApplicationRecord
  belongs_to :composition
end
  

composition.rb:

 class Composition < ApplicationRecord
  has_many :scores
  has_and_belongs_to_many :countries, join_table: :rights_countries
end
  

country.rb:

 class Country < ApplicationRecord
  has_and_belongs_to_many :compositions, join_table: :rights_countries
end
  

В activeadmin я хочу иметь возможность редактировать страны композиции, но в форме редактирования ее партитур.

Конечно, форма импортирует эти данные из композиции, и входные данные по умолчанию будут одинаковыми для всех оценок (дочерних элементов) композиции.

До сих пор я не нашел способа реализовать это в activeadmin.

Возможно ли это вообще? Если да, является ли решение простым или громоздким?

Ответ №1:

Следуя этой ссылке, я добавил inputs внутри inputs и обновил соответствующие параметры. Я также добавил accepts_nested_attributes_for :composition в модель оценки.

app/models/score.rb

 ...
accepts_nested_attributes_for :composition
...
  

app/admin/score.rb

 ...
permit_params ...,
              composition_attributes: [:id, country_ids: []]
...
form do |f|
  f.inputs do
    ...
    f.inputs "", for: [:composition, score.composition] do |c|
      c.input :countries, as: :select, collection: Country.order_by_name.uniq.map { |p| [p.name, p.id] }
    end
  end
end
  

Дайте мне знать, если есть более чистое решение.