2012-10-01 29 views

回答

0

您可以在控制器中創建一個只適用於編輯操作的before_filter。它可以檢查狀態,並允許它運行或取決於方法的返回。

像這樣的事情在你的應用程序控制器:

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

然後在你的問題的控制器的開始

before_filter :some_method, :only => :edit 
+0

這是一個步驟,但我想隱藏編輯鏈接(在你的例子中)。 –

+0

我改變了節目進行編輯。基本上,這將重新定向時,一些命中的編輯路徑,除非條件滿足你的期望。我認爲這是你想要做的。如果不是,請提供一些更詳細的信息,以便我們能更好地回答您。 – jameswilliamiii

-1

如果u要隱藏的「編輯」鏈接(在active_admin觀點)如果對象具有某個特定值,則可以覆蓋方法的默認視圖並在顯示鏈接之前添加條件。

6

如果在索引操作談論隱藏了默認顯示的編輯鏈接(連同查看和刪除鏈接),你可以自定義索引視圖如下:

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 

因爲該列的內容將僅爲column塊返回的內容,您需要將所有三個(或兩個)鏈接一次返回爲一個字符串。這裏使用raw,以便顯示實際的鏈接,而不是鏈接的html。

+0

感謝您的回答!如果你可以添加提示刪除,那將會很棒。 –

7

我終於做到了。我需要兩件事:

直接訪問時重定向並隱藏按鈕到編輯頁面。

重定向當用戶試圖直接進入編輯頁面我用的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 
+1

'instance'應該是'model'(snake_case中的模型名稱)。 – ypresto

1

這可以實現使用以下內容:

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將附加您的客戶tom操作以激活管理員默認操作。