2

シナリオは次のとおりです。

私のサイトには何人かのユーザーがいます。ユーザーにはロールがあり、関連するロールはadminnormalです。モデルもあります。 と呼びましょうSomeModel

管理レイアウトを使用するサイトのバックエンドを作成しました。すべての管理者は、コンテンツを編集するための完全なアクセス権を持っています。

この関係で問題が発生します: User -> owns -> SomeModel。これは、管理者以外 のユーザーが のインスタンスを所有SomeModelでき、このインスタンスのデータを編集できる必要があることを意味します。

のコントローラーにSomeModelは、管理者と通常のユーザーの両方に対応する編集アクションがあります。

ただし、通常のユーザーに管理レイアウトを表示させたくありません。現在、これを行う方法は次のとおりです。

if current_user.admin?
  render :layout => 'admin'
end

ユーザーが管理者でない場合、デフォルトで標準レイアウトになります。私はこれをすべてのアクションSomeModelに取り入れていますが、Rails のやり方とは思えません。

より良い方法はありますか?

4

1 に答える 1

4

これは、コントローラーレベルで実行できます。

  class MyModelController < ActionController::Base
    layout :user_or_admin_layout

    def index
      # fetching objects
    end

    private
      def user_or_admin_layout
        current_user.admin? ? "admin_layout" : "user_layout"
      end
  end

レイアウトのレールのドキュメントには、さらに多くの例があります

于 2010-09-15T19:06:38.683 に答える