【问题标题】:Methods not generated for Opinions with Mongoid没有为带有 Mongoid 的意见生成的方法
【发布时间】:2013-11-15 18:40:52
【问题描述】:

我正在尝试在 RoR 上构建一个应用程序,该应用程序通过 Mongoid 使用 MongoDB 作为主要对象,但通过 Opinions https://github.com/leehambley/opinions/ 使用 Redis 有一个喜欢和不喜欢的过程。

它有点工作,但是当我在我的对象上运行方法时,我只是收到一个错误“未定义的方法 `like_by'”,我认为这些方法应该是自动生成的。

我的模型看起来像:

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)

【问题讨论】:

    标签: ruby-on-rails mongodb redis mongoid


    【解决方案1】:

    所以,事实证明意见并没有真正起作用。为什么我使用 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
    

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      相关资源
      最近更新 更多