7

編集するオブジェクトが特定のステータスの場合、編集パスを非表示にしたい。

どうやってやるの?

4

5 に答える 5

12

ついにやりました。私は2つのことが必要でした:

直接アクセスしたときにリダイレクトし、編集ページへのボタンを非表示にします。

ユーザーが編集ページに直接アクセスしようとしたときにリダイレクトするには、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

index アクションでデフォルトで表示される編集リンク (表示および削除リンクと一緒に) を非表示にすることについて話している場合は、次のように index ビューをカスタマイズできます。

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 つ) のリンクすべてを一度に文字列として返す必要があります。Hererawは、リンクの html ではなく、実際のリンクが表示されるようにするために使用されます。

于 2012-10-03T06:34:26.987 に答える
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 に答える