ユーザーの役割に応じて、ビューの一部を非表示にしようとしています。
それでは、管理者だけが製品を破棄できるようにしたいとしましょう。通常のユーザーがレコードを破棄するのを防ぐためのコントローラーのコードに加えて、ビューで次のことを行います。
<% if current_user.admin? %>
<%= link_to 'Delete', product, method: :delete %>
<% end %>
前のコードは機能しますが、省略によるエラーが発生しやすく、実行を許可されていないアクションへのリンクが通常のユーザーに表示される可能性があります。
また、後で新しい役割 (「モデレーター」など) が製品を削除できると判断した場合、削除リンクを表示するビューを見つけて、モデレーターがそれを表示できるようにするロジックを追加する必要があります。
また、管理者ユーザー (プロモーション、ユーザーなど) のみが削除できるモデルが多数ある場合、すべての if を維持するのは非常に困難です。
それを行うより良い方法はありますか?たぶん、ヘルパーなどを使用していますか?私はおそらくこのようなものを探しています:
<%= destroy_link 'Delete', product %> # Only admins can see it
<%= edit_link 'Edit', promotion %> # Again, only admins see this link
<%= show_link 'Show', comment %> # Everyone sees this one
私に似た次の 2 つの質問を見つけましたが、いずれも私の質問に答えませんでした。