0

主なオブジェクトに Mongoid を介して MongoDB を使用する RoR でアプリケーションを構築しようとしていますが、意見https://github.com/leehambley/opinions/を介して Redis を使用する好き嫌いのプロセスがあります。

ある程度は機能しますが、オブジェクトでメソッドを実行すると、メソッドが自動生成されるはずの「undefined method `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)
4

1 に答える 1

0

したがって、意見は実際には機能しないことがわかりました。Railsでの2週間を少し超えたのはなぜですか:)

とにかく、これはとにかく手で行うのが本当に簡単であることがわかりました。特に、処理するのは好き嫌いしかなかったからです。

一意のキーとスコアの値のペアを許可する 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
于 2014-01-09T10:30:06.657 に答える