如果要编辑的对象具有某种状态,我想隐藏编辑路径。
我怎样才能做到这一点?
我终于做到了。我需要两件事:
直接访问时重定向并隐藏按钮到编辑页面。
为了在用户尝试直接访问编辑页面时重定向,我使用了 before_filter:
before_filter :some_method, :only => [:edit, :update]
def some_method
redirect_to action: :show if status == something
end
要隐藏按钮,我这样做:
ActiveAdmin.register Model do
config.clear_action_items!
action_item :only => [:show] , :if => proc { instance.status == something } do
link_to 'Edit', edit_model_path(instance)
end
end
If you are talking about hiding the edit link that is shown by default (along with the view and delete links) in the index action, you can customize the index view as follows:
ActiveAdmin.register Model do
index do
column :actions do |object|
raw( %(#{link_to "View", [:admin, object]}
#{link_to "Delete", [:admin, object], method: :delete}
#{(link_to"Edit", [:edit, :admin, object]) if object.status? }) )
end
end
end
Because the content of the column will be only what is returned by the column
block, you need to return all three (or two) links at once as a string. Here raw
is used so that the actual links will be displayed and not the html for the links.
这可以通过以下方式实现:
ActiveAdmin.register Object do
index do
column :name
actions defaults: true do |object|
link_to 'Archive', archive_admin_post_path(post) if object.status?
end
end
end
请注意,使用defaults: true
会将您的自定义操作附加到活动的管理员默认操作。
您可以在您的控制器中创建一个before_filter
仅适用于编辑操作的。它可以检查状态,并允许它运行或redirect_to
取决于方法的返回。
在您的应用程序控制器中是这样的:
def some_method
if foo.bar == true
redirect_to foos_path
end
end
然后在您的问题控制器的开头
before_filter :some_method, :only => :edit
如果您想隐藏对象的“编辑”链接(在 active_admin 视图中),如果对象包含某些特定值,您可以覆盖该方法的默认视图并在显示链接之前添加条件。