所以我有一个名为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
根本不起作用。
这可能是什么问题?
答案 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