Ruby on rails 使用Mongoid未生成意见的方法
我正在尝试在RoR上构建一个应用程序,该应用程序通过Mongoid使用MongoDB作为主要对象,但通过意见使用Redis有一个喜欢和不喜欢的过程 这是可行的,但是当我在我的对象上运行方法时,我只得到一个错误“undefined method`like_by'”,我认为这些方法应该是自动生成的 我的模型看起来像:Ruby on rails 使用Mongoid未生成意见的方法,ruby-on-rails,mongodb,redis,mongoid,Ruby On Rails,Mongodb,Redis,Mongoid,我正在尝试在RoR上构建一个应用程序,该应用程序通过Mongoid使用MongoDB作为主要对象,但通过意见使用Redis有一个喜欢和不喜欢的过程 这是可行的,但是当我在我的对象上运行方法时,我只得到一个错误“undefined method`like_by'”,我认为这些方法应该是自动生成的 我的模型看起来像: class Punchline include Mongoid::Document include Opinions::Pollable opinions :like,
class Punchline
include Mongoid::Document
include Opinions::Pollable
opinions :like, :dislike
field :key, type: String
field :text, type: String
field :won, type: Boolean
field :created, type: Time, default: ->{ Time.now }
field :score, type: Integer
index({ key: 1 }, { unique: true, name: "key_index" })
belongs_to :user
embedded_in :joke
end
我跑:
user = User.find(session[:userid])
@joke.punchlines.sample.like_by(user);
但由于未定义的方法错误而失败:(
我需要在其他地方初始化意见吗
/config/initializers/opinions.rb
Opinions.backend = Opinions::RedisBackend.new
Redis.new(:host => 'localhost', :port => 6379)
所以,事实证明,意见并没有真正起作用。为什么我在Rails的两周时间有点长:) 不管怎样,事实证明,这真的很容易用手来做,尤其是因为我只有喜欢和不喜欢来处理 我使用了一个Redis排序集,它允许一个具有分数的唯一键值对。我使用+1或-1表示喜欢或不喜欢,然后对键进行编码以表示喜欢的对象,并将值作为用户id 这看起来像:
def like(user)
$redis.zadd('joke:'+self.key+':likes', 1, user._id)
end
def dislike(user)
$redis.zadd('joke:'+self.key+':likes', -1, user._id)
end
def numLikes
res = $redis.zrangebyscore('joke:'+self.key+':likes',1,1);
return res.count
end
def numDislikes
res = $redis.zrangebyscore('joke:'+self.key+':likes',-1,-1);
return res.count
end
def likedBy(user)
res = $redis.zscore('joke:'+self.key+':likes',user._id)
return (res == 1)
end
def dislikedBy(user)
res = $redis.zscore('joke:'+self.key+':likes',user._id)
return (res == -1)
end