Ruby on rails ActiveAdmin操作项取决于数据的状态

Ruby on rails ActiveAdmin操作项取决于数据的状态,ruby-on-rails,activeadmin,Ruby On Rails,Activeadmin,如果要编辑的对象具有特定状态,我想隐藏编辑路径 如何才能做到这一点?您可以在控制器中创建一个只适用于编辑操作的前置过滤器。它可以检查状态,并允许它运行或根据方法的返回将\u重定向到 在应用程序控制器中类似于以下内容: def some_method if foo.bar == true redirect_to foos_path end end 然后在问题的开头 before_filter :some_method, :only => :edit 如果要隐藏对象的“编辑

如果要编辑的对象具有特定状态,我想隐藏编辑路径


如何才能做到这一点?

您可以在控制器中创建一个只适用于编辑操作的
前置过滤器。它可以检查状态,并允许它运行或根据方法的返回将\u重定向到

在应用程序控制器中类似于以下内容:

def some_method
  if foo.bar == true
    redirect_to foos_path
  end
end
然后在问题的开头

before_filter :some_method, :only => :edit

如果要隐藏对象的“编辑”链接(在活动的\u管理视图中),如果对象具有某些特定值,则可以覆盖该方法的默认视图,并在显示链接之前添加条件。

如果要隐藏索引操作中默认显示的编辑链接(以及视图和删除链接),您可以按如下方式自定义索引视图:

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

由于列的内容将仅是
块返回的内容,因此需要将所有三个(或两个)链接同时作为字符串返回。这里使用了
raw
,以便显示实际的链接,而不是链接的html。

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

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

要在用户尝试直接访问编辑页面时重定向,我使用before_过滤器:

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

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

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

这是一个步骤,但我还想隐藏要编辑的链接(在您的示例中)。我将“显示”更改为“编辑”。基本上,当某些内容到达编辑路径时,这将重定向,除非条件满足您的期望。我想这就是你想要做的。如果没有,那么请提供更多细节,以便我们能够更好地回答您。谢谢您的回答!如果您可以添加删除提示,那就太好了。
实例
应该是
模型
(snake_case中的模型名称)。