如何为ActiveAdmin Devise的管理员用户传递ApplicationController方法?

时间:2014-07-31 04:29:24

标签: ruby-on-rails ruby ruby-on-rails-4 devise activeadmin

我正在ActiveAdmin使用Devise并拥有2个模型,User和AdminUser。两个模型在生成时都是Devise的一部分:

20140210105605_devise_create_users.rb

20140731015129_devise_create_admin_users.rb

users表有4个新列,分别是:name,:latitude,:longitude,:address

以防初始化器/ devise.rb中我添加了以下行:

# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
config.scoped_views = true

# Configure the default scope given to Warden. By default it's the first
# devise role declared in your routes (usually :user).
config.default_scope = :user

我无法通过仅为我的用户传递的方法:

ApplicationController

before_filter :set_user_location

private

def set_user_location
  if user_signed_in?
    @user_location = current_user.address
    @user_latitude = current_user.latitude 
    @user_longitude = current_user.longitude
  end
end

这让我犯了这个错误:

undefined method `address' for nil:NilClass

但是除非用户登录,否则不应该使用此方法,而不是AdminUser。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

试试这个:before_filter :set_user_location, :if => proc { current_user }

在这种情况下,只有在设置了curren_user时才会应用过滤器。