Подтвердить что ты не робот

Формы ActiveAdmin с отношениями has_many - belongs_to?

У меня есть модели Home и Photo, которые имеют отношение has_many - belongs_to (полиморфные отношения, но я не думаю, что это имеет значение в этом случае). Теперь я настраиваю активный администратор, и я бы хотел, чтобы администраторы могли добавлять фотографии в дома из формы дома.

Фотографии управляются камнем CarrierWave, который я не знаю, будет ли проблема проще или сложнее.

Как включить поля формы для другой модели в форме Active Admin Home? Любой опыт делает что-то подобное?

class Home < ActiveRecord::Base
  validates :name, :presence => true,
                     :length => { :maximum => 100 }
  validates :description, :presence => true      
  has_many :photos, :as => :photographable

end


class Photo < ActiveRecord::Base
    belongs_to :photographable, :polymorphic => true
    mount_uploader :image, ImageUploader
end
4b9b3361

Ответ 1

Попробуйте что-нибудь подобное в app/admin/home.rb:

form do |f|
  f.inputs "Details" do
    f.name
  end

  f.has_many :photos do |photo|
    photo.inputs "Photos" do
      photo.input :field_name 
      #repeat as necessary for all fields
    end
  end
end

Удостоверьтесь, что это в вашей домашней модели:

accepts_nested_attributes_for :photos

Я изменил это из другого вопроса: Как использовать ActiveAdmin для моделей с использованием has_many через ассоциацию?

Ответ 3

У меня есть модель has_one, например:

f.has_many :addresses do |a|
  a.inputs "Address" do
    a.input :street  ... etc.

Хотя это верно отражает наши ассоциации для Address (который является полиморфной моделью) с использованием f.has_one не выполняется. Поэтому я перешел на has_many и все хорошо. Кроме того, мы должны помешать нашим пользователям создавать несколько адресов для одного и того же объекта.

Ответ 4

Вы можете попробовать следующее:

form do |f|
  f.semantic_errors # shows errors on :base
  f.inputs          # builds an input field for every attribute

  f.inputs 'Photos' do
    f.has_many :photos, new_record: false do |p|
      p.input :field_name
      # or maybe even
      p.input :id, label: 'Photo Name', as: :select, collection: Photo.all
    end
  end

  f.actions         # adds the 'Submit' and 'Cancel' buttons  
end

Кроме того, вы можете посмотреть https://github.com/activeadmin/activeadmin/blob/master/docs/5-forms.md (см. Вложенные ресурсы)