我想在Spree :: User中添加vendor?
函数。
所以我创建了 app / models / spree / user.rb
module Spree
class User < Spree::Base
include Spree::UserMethods
def vendor?
self.role_users.any? { |ru| ru.role.name == 'vendor' }
end
end
end
如果我启动rails console并测试,这是有效的:
u = Spree::User.last; u.vendor? # => false
但是当我启动rails服务器并访问某个页面时,我收到此错误: Spree :: Admin :: OrdersController #index中的NoMethodError 未定义的方法`serialize_from_session&#39;对于#
堆栈跟踪
activerecord (4.2.5) lib/active_record/dynamic_matchers.rb:26:in `method_missing'
devise (3.5.4) lib/devise.rb:465:in `block (2 levels) in configure_warden!'
warden (1.2.4) lib/warden/session_serializer.rb:34:in `fetch'
warden (1.2.4) lib/warden/proxy.rb:212:in `user'
warden (1.2.4) lib/warden/proxy.rb:322:in `_perform_authentication'
warden (1.2.4) lib/warden/proxy.rb:104:in `authenticate'
devise (3.5.4) lib/devise/controllers/helpers.rb:124:in `current_spree_user'
solidus_auth_devise (1.3.0) lib/spree/authentication_helpers.rb:11:in `spree_current_user'
solidus/core/lib/spree/core/controller_helpers/auth.rb:67:in `try_spree_current_user'
solidus/core/lib/spree/core/controller_helpers/auth.rb:31:in `current_ability'
cancancan (1.13.1) lib/cancan/controller_additions.rb:338:in `authorize!'
solidus/backend/app/controllers/spree/admin/base_controller.rb:22:in `authorize_admin'
知道我该怎么做才能解决这个错误吗?根据堆栈跟踪,看起来我在某个地方错过了一个方法。
干杯, 马丁
答案 0 :(得分:0)
答案是打开Spree :: User类并添加您缺少的方法:
E.g:
配置/初始化/ spree_user.rb
Spree::User.class_eval do
def vendor?
self.role_users.any? { |ru| ru.role.name == 'vendor' }
end
end