我没有在Rails 4.1.5中正确使用问题

时间:2014-10-08 18:28:15

标签: ruby-on-rails

所以我正在玩弄问题,并且我想到了我做了以下几个有趣的问题:

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那样。

我确信这很简单。

1 个答案:

答案 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