我正在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。我该如何解决这个问题?
答案 0 :(得分:3)
试试这个:before_filter :set_user_location, :if => proc { current_user }
在这种情况下,只有在设置了curren_user时才会应用过滤器。