自定义模型没有从包含的模块获取方法

时间:2015-05-16 12:19:13

标签: ruby-on-rails

所以我有一个名为Like的自定义模型,如下所示:

class Like
    include LikeRedis

    attr_reader :user_id

    def initialize(attributes)
        @user_id = attributes[:user_id]
    end

    def self.for_medium(medium)
        get_likes(medium).map { |like| Like.new(like: {user_id: like.to_i}) }
    end

end

app/models/concerns/我有like_redis.rb

看起来像这样:

module LikeRedis
    extend ActiveSupport::Concern

    ...

    def get_likes(medium)
        $redis.smembers("medium:#{medium.id}:#{:likes}")
    end
end

现在,如果我想使用我拥有的get_like方法,rails会抛出此错误:

NoMethodError: undefined method `get_likes' for Like:Class

我在文件中也尝试了其他方法,但没有一种方法有效,就好像include LikeRedis根本不起作用。

这可能是什么问题?

1 个答案:

答案 0 :(得分:1)

看起来,就像你试图调用Like.get_likes(medium)一样,但是你定义它的方式,希望你有一个Like类的实例并在实例上调用它

like = Like.new
like.get_likes(medium)

如果您希望代码有效,您需要按以下方式定义方法:

module LikeRedis
  extend ActiveSupport::Concern

  ...

  def self.get_likes(medium)
    $redis.smembers("medium:#{medium.id}:#{:likes}")
  end
end