編集するオブジェクトが特定のステータスの場合、編集パスを非表示にしたい。
どうやってやるの?
ついにやりました。私は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
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 ではなく、実際のリンクが表示されるようにするために使用されます。
before_filter
編集アクションにのみ適用される をコントローラーで作成できます。ステータスを確認し、実行を許可するかredirect_to
、メソッドの戻りに応じて実行できます。
アプリケーションコントローラーで次のようなもの:
def some_method
if foo.bar == true
redirect_to foos_path
end
end
次に、問題のコントローラーの冒頭に
before_filter :some_method, :only => :edit
オブジェクトが特定の値を保持している場合に、オブジェクトの「編集」リンク(active_adminビュー内)を非表示にする場合、リンクが表示される前に、メソッドのデフォルトビューをオーバーライドし、条件を追加できます。