7

如果要编辑的对象具有某种状态,我想隐藏编辑路径。

我怎样才能做到这一点?

4

5 回答 5

12

我终于做到了。我需要两件事:

直接访问时重定向并隐藏按钮到编辑页面。

为了在用户尝试直接访问编辑页面时重定向,我使用了 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
于 2012-10-03T13:41:52.570 回答
7

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.

于 2012-10-03T06:34:26.987 回答
2

这可以通过以下方式实现:

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会将您的自定义操作附加到活动的管理员默认操作。

于 2013-10-22T14:03:47.950 回答
0

您可以在您的控制器中创建一个before_filter仅适用于编辑操作的。它可以检查状态,并允许它运行或redirect_to取决于方法的返回。

在您的应用程序控制器中是这样的:

def some_method
  if foo.bar == true
    redirect_to foos_path
  end
end

然后在您的问题控制器的开头

before_filter :some_method, :only => :edit
于 2012-10-01T20:39:20.547 回答
-2

如果您想隐藏对象的“编辑”链接(在 active_admin 视图中),如果对象包含某些特定值,您可以覆盖该方法的默认视图并在显示链接之前添加条件。

于 2012-10-03T05:41:33.097 回答