ActiveAdmin: отображение формы в виде IFRAME в другой форме

#ruby-on-rails #ruby-on-rails-3.1 #activeadmin

#ruby-on-rails #ruby-on-rails-3.1 #activeadmin

Вопрос:

Я разрабатываю приложение с моделью галереи и моделью изображений, где в каждой галерее есть_and_belong_to_many изображений.

В настоящее время я разрабатываю форму для создания / редактирования галереи. Из этой формы я хотел бы, чтобы пользователи могли как добавлять существующие изображения, так и загружать новые изображения в галерею. После долгих размышлений я смог использовать функциональность Rails «вложенные формы модели» для достижения этой цели, но конечный результат был неудовлетворительным с точки зрения пользовательского интерфейса.

Я понял, что мне действительно нужен IFRAME в форме моей галереи, который содержит форму изображения. Как я могу включить форму изображения в качестве IFRAME без всей окружающей разметки, которая обычно отображается вместе с формой (например, заголовок, строка заголовка и нижний колонтитул)? Обратите внимание, что в приведенном ниже коде я уже использую «:layout => false» при вызове «render» в моем методе контроллера «new_iframe».

Вот мой файл ресурсов изображения:

 ActiveAdmin.register Image do

  controller.authorize_resource

  scope_to :current_admin_user

  collection_action :new_iframe, :method => :get do
    @image = Image.new    
    render :action => :new, :layout => false
  end

  controller do
    ...
  end

  index do
    column :title do |image|
      link_to image.title, edit_admin_image_path(image)
    end
    column :image do |image|
      image_tag(image.thumb_path, :alt => "")
    end
    column :created_at
    column :updated_at
    default_actions
  end

  form :html => { :enctype => "multipart/form-data" } do |a|
    a.inputs "Image", :multipart => true do
      a.input :title
      a.input :asset, :as => :file
    end    
    a.buttons
  end

end
  

Комментарии:

1. Я был бы очень удивлен, если бы поля формы во встроенном документе IFRAME были включены в параметры при отправке формы. Вы проверили, что это работает с очень простым полем формы HTML, первым?

2. Джон, идея в том, что IFRAME имеет свою собственную форму с собственной кнопкой отправки, что позволяет отправлять ее независимо от окружающей формы. Вы правы в том, что поля внутренней формы не будут отправлены вместе с окружающей формой.

Ответ №1:

в файле модели (где медиа — это ваша модель галереи)

     accepts_nested_attributes_for :media, 
:reject_if => lambda { |a| a[:image].blank? }, 
:allow_destroy => true  
  

в active admin

     f.inputs "Media" do
  f.has_many :media do |j|
    j.inputs "media" do
      if !j.object.nil?
        j.input :_destroy, :as => :boolean, :label => "Destroy?"
      end
      j.input :image, :hint => f.template.image_tag(j.object.image.thumb.url(), :width => '100')

    end
  end
end