2012-10-01 8 views

答えて

0

コントローラに編集アクションにのみ適用されるbefore_filterを作成できます。それは状態をチェックし、それが実行できるようにするか、メソッドの戻りに応じてredirect_toにすることができます。

アプリケーションのコントローラでは、このような何か:

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

次に質問

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

これは1つのステップですが、編集するリンクも非表示にしたい(例の場合)。 –

+0

私はショーを編集するように変更しました。基本的には、条件が期待通りに満たされない限り、何かが編集パスに当たったときにリダイレクトされます。私はこれがあなたが探しているものだと思います。そうでない場合は、もっと詳しくお答えください。 – jameswilliamiii

-1

のあなたのコントローラの初めにuは(active_adminビューの)「編集」リンクを非表示にする場合オブジェクトが特定の値を保持している場合は、メソッドのデフォルトビューをオーバーライドして、リンクが表示される前に条件を追加できます。あなたはindexアクションで(リンクビューと一緒に削除)デフォルトで表示される編集リンクを隠して話をしている場合は、次のよう

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ブロックによって返される内容のみになります。3つ(または2つ)のリンクをすべて一度に文字列として返す必要があります。ここではrawが使用され、実際のリンクが表示され、リンクのhtmlは表示されません。

+0

あなたの答えをありがとう!削除のプロンプトを追加することができれば素晴らしいことでしょう。 –

7

私はついにそれをしました。私は2つのものが必要でした:

リダイレクト直接アクセスして編集ページにボタンを隠すとき。私はこのようにそれを行うのボタンを非表示にするには

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

これを達成することができ、ユーザは、私はbefore_filterを使用して編集ページに直接アクセスしようとすると

をリダイレクトするには以下を使用してください:

defaults: trueを使用すると、 tomアクションをアクティブな管理者のデフォルトアクションに変更します。

関連する問題