3

ギャラリー ビュー パーシャルで自分のギャラリーに関連付けられた新しいイメージを作成するべきではないことはわかっています。ただし、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
4

1 に答える 1

2

Active Adminは、アクションマジックを継承されたリソースに依存しています。コントローラーアクションを開いて、それに何かを追加することができます。独自のインスタンス変数を作成することもでき、ActiveAdminは独自のインスタンス変数を作成する代わりにそれを自動的に使用します。

あなたの場合、新しいアクションでそれを構築する場所であれば、次のようなことをします:

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
于 2011-10-17T16:47:17.123 に答える