我知道我不应该在Gallery视图部分为我的图库构建新的关联图像。但是,我无法想象在ActiveAdmin生成的控制器中做到这一点,显然可以使用资源文件中的“Controller”方法进行自定义。如何使用Controller方法而不是视图partial?
这是我的图库资源文件:
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:在“控制器执行”块中添加以下方法(基于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
答案 0 :(得分:2)
Active Admin取决于Inherited Resources的动作魔法。您可以打开任何控制器操作并向其添加内容。您甚至可以创建自己的实例变量,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