所以我正在玩弄问题,并且我想到了我做了以下几个有趣的问题:
class User < ActiveRecord::Base
include RoleData
end
class User
module RoleData
extend ActiveSupport::Concern
module ClassMethods
def role
roles.first.try(:role)
end
end
end
end
但现在当我执行rails c
并执行user = User.find(5)
然后执行user.role
时,它告诉我此对象没有角色方法:#{1}}角色'用于#`< / p>
那么,我做错了什么?我正在看ryan bates about concerns and services,我很困惑。为什么这个用户类没有角色方法?
我运行我的测试并且它们失败了,不是因为加载问题,而是因为明确定义了缺失或未定义的方法,就像我甚至不能NoMethodError: undefined method
那样。
我确信这很简单。
答案 0 :(得分:0)
之所以发生这种情况是因为您将role
方法定义为类方法,您甚至不需要Concern
来定义简单的实例方法,因此您可以编写:
module RoleData
def role
roles.first.try(:role)
end
end
如果您需要更多内容,那么您只需编写实例方法:
module RoleData
extend ActiveSupport::Concern
included do
# block will be executed in User class after including RoleDate
# you could write here `has_many`, `before_create` etc.
# ....
end
module ClassMethods
# class methods
# ....
end
# instance methods
# ....
end