8

ディレクトリで、/views/layouts現在のユーザーを取得するにはどうすればよいですか? 私はDeviseを使用current_userしていますが、何らかの理由でここで動作せず、不明な方法と記載されています。私は次のようなことをしたい:

<% if User.role? == "gen_admin" %>
    <li>
    <%= link_to('Admin', users ) %>
    </li>
<% end %>

User モデルで定義されたrole?メソッドがありますが、それでも次の例外が発生します。

undefined method 'role?' for #<Class:0x3fcc1e0>

では、現在のユーザーを取得し、ソース ツリーのこのレベルでそのユーザーのフィールドにアクセスするにはどうすればよいでしょうか? ありがとう!

ここに役割がありますか?方法:

# in User
ROLES = %w[gen_admin teacher_admin student]
def role?(base_role)
  ROLES.index(base_role.to_s) <= ROLES.index(role)
end
4

4 に答える 4

11

コードでは、ユーザーがいつログインしているか、いつログインしていないかを考慮する必要があります。

ログインしているユーザーがいない場合は、current_usernil が返されます(あなたの場合のように、これはDevise側のエラーだと思いました)。

ビュー コードはこれを処理する必要があります。

<% if current_user.present? && current_user.role?('gen_admin') %>
于 2013-04-18T08:19:01.507 に答える
2

role?メソッドをインスタンス メソッドとして定義しました。これは、それを使用するには、最初にUserクラスからインスタンスを作成する必要があることを意味します。

@user=User.new

今、あなたは呼び出すことができます@user.role?

role?モデルを介して利用できるようにしたい場合はUser、検証のためにクラスメソッドとしてオブジェクトにパスを定義する必要があります

def self.role?(user)

...

end
于 2013-04-18T07:15:24.760 に答える
-1

before_filter :authenticate_user!コントローラーを追加するのを忘れていませんか? これにより、 current_user がビューで利用できるようになります

于 2013-04-18T07:17:19.000 に答える