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

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

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

Как включить поля формы для другой модели в домашнюю форму активного администратора? Есть ли опыт делать что-то подобное?

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

person agente_secreto    schedule 31.10.2011    source источник


Ответы (4)


Попробуйте что-то подобное в 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 через ассоциацию?

person jfedick    schedule 07.11.2011
comment
Спасибо, чувак, но как только я использую f.has_many, я получаю сообщение об ошибке: неопределенный метод `new_record?' для нуля: NilClass - person agente_secreto; 08.11.2011
comment
Может, это как-то связано с полиморфной ассоциацией? - person agente_secreto; 08.11.2011
comment
Я пытался использовать accepts_nested_attributes_for :photos в своей домашней модели, но это тоже не работает. - person agente_secreto; 08.11.2011
comment
Хорошо, я сделал эту последнюю часть неправильно в первый раз, но это была оставшаяся проблема, поэтому, возможно, вам следует добавить ее в свой ответ. Спасибо! - person agente_secreto; 08.11.2011
comment
Я также получаю неопределенный метод 'new_record?' для nil: ошибка NilClass. Как вы это решили @agente_secreto? - person Agis; 02.09.2012
comment
Вам нужно добавить accepts_nested_attributes_for :children в вашу родительскую модель - вот как это решилось - person Ildar; 02.01.2013
comment
@agente_secreto Я обновил свое решение вызовом accepts_nested_attributes. - person jfedick; 07.03.2013
comment
Мне пришлось сделать f.input :name, а не f.name. - person ScottJShea; 28.06.2013
comment
Также необходимо добавить f.actions в качестве последнего элемента в блоке form, чтобы получить кнопки «Создать» и «Отмена». - person tmimicus; 22.01.2014
comment
Позволит ли движок обновлять данные каждой фотографии отдельно без перезагрузки всей страницы? - person Малъ Скрылевъ; 23.05.2014
comment
если у меня есть набор изображений, и я хочу выбрать из них значения, как я могу сделать это с помощью форм? пример: у меня есть продукт и несколько категорий, когда я создаю новый продукт, я должен иметь возможность добавлять несколько категорий из предопределенного списка категорий. - person Rahul Raveendran; 27.11.2017

Вы можете попробовать это:

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 (см. Вложенные ресурсы)

person MegaCasper    schedule 19.03.2015

Я думаю, вы ищете форму для вложенной модели. Взгляните на следующие рельсовые трансляции.

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/197-nested-model-form-part-2

Я не могу много рассказать вам об active_admin, но я думаю, что это не должно влиять на работу с вложенной моделью.

person rangalo    schedule 07.11.2011
comment
Отлично, я проверю их, рельсовые трансляции всегда очень полезны - person agente_secreto; 07.11.2011

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

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

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

person John Mount    schedule 28.05.2012