ActiveAdmin: хотите построить новую ассоциацию из контроллера вместо частичного представления - PullRequest
3 голосов
/ 17 октября 2011

Я знаю, что не следует создавать новое связанное изображение для моей галереи в частичном представлении галереи. Однако я не могу понять, как это сделать в сгенерированном контроллере ActiveAdmin, который, очевидно, можно настроить с помощью метода «Controller» в файле ресурсов. Как я могу сделать это, используя метод Controller вместо частичного представления?

Вот файл ресурсов моей галереи:

ActiveAdmin.register Gallery do

  controller.authorize_resource

  scope_to :current_admin_user

  before_filter :block_access

  controller do
    def block_access
      if params && params['q'] && params['q']['admin_user_id_eq']
        params['q']['admin_user_id_eq'] = nil
      end
    end
  end

 form :partial => "form"

end

Вот мой частичный вид галереи:

  <% new_image = @gallery.images.build %>  
  <%= semantic_form_for [:admin, @gallery] do |g| %>
    <%= g.inputs "Details" do %>
      <%= g.input :title %>
      <%= g.input :images, :as => :check_boxes, :label_method => Proc.new { |image| image_tag(image.thumb_path, :alt => "") + content_tag("h3", image.title)  } %>
    <% end %>
    <%= g.inputs :for => [:images, new_image], :name => "New Image" do |image| %>
      <% if image.object.new_record? %>
        <%= image.input :title %>
        <%= image.input :asset, :as => :file %>
      <% end %>
    <% end %>
    <%= g.buttons %>
  <% end %>

ОБНОВЛЕНИЕ # 1: Добавление следующих методов в блок "controller do" (основанное на предложении Thomas Watson ) сработало для создания / редактирования галерей.

def new
  @gallery = Gallery.new
  @new_image = @gallery.images.build
  new!
end

def edit
  @gallery = Gallery.find(params[:id])
  @new_image = @gallery.images.build
  edit!
end

def update
  @gallery = Gallery.find(params[:id])
  @new_image = @gallery.images.build
  update!
end

1 Ответ

2 голосов
/ 17 октября 2011

Активный администратор зависит от Унаследованных ресурсов за его магию действия.Вы можете открыть любое действие контроллера и добавить вещи к нему.Вы даже можете создать свою собственную переменную экземпляра, и Active Admin будет автоматически использовать ее вместо создания своей собственной.

В вашем случае вы бы сделали что-то подобное, если бы вы создали его на новом действии:

ActiveAdmin.register Gallery do
  controller do
    def new
      @gallery = Gallery.new
      @new_image = @gallery.images.build

      # call `new!` to ensure that the rest of the action continues as normal
      new!
    end
  end
end
...