簡體   English   中英

Wilson在Rails中得分+在Postgres Select語句中添加隨機數以支持投票

[英]Wilson Score in Rails + Add Random Number to Upvote in Postgres Select Statement

我想在我的Wilson Score選擇語句中添加一個隨機數。

我的帖子模型具有“ upvotes_count”和“ downvotes_count”列,該列根據其具有多少upvotes和downvotes來遞增和遞減(duh ..)。

Post.select("((upvotes_count + 1 + 1.9208) / (upvotes_count + downvotes_count + 2) - " +
            "1.96 * SQRT(((upvotes_count + 1) * (downvotes_count + 1)) / (upvotes_count + downvotes_count + 2) + 0.9604) / " +
            "(upvotes_count + downvotes_count + 2)) / (1 + 3.8416 / (upvotes_count + downvotes_count + 2)) " +
            "AS ci_lower_bound, posts.*")
    .order("ci_lower_bound DESC")

注意:從理論上講,Wilson Score不允許upvotes_count和downvotes_count都等於0的情況,因此我作弊並將upvote和downvote添加到每個帖子記錄中。 我知道這是數學上的“褻瀆”,所以請不要傷害我數學之神。 否則,我將不會獲得零投票數和零投票數的過帳記錄……這太糟了。

理想的情況是具有一個select語句,該語句將為每個帖子的upvotes_count添加一個不同的隨機數(最好是Poisson),以使其人為地提高其Wilson得分,從而使其偶爾出現在列表中更高的位置。

問題:如何為在select語句中選擇的每個帖子添加不同的隨機數到upvotes_count?

像這樣的東西...但顯然不起作用...

Post.select("((upvotes_count + 1 + random + 1.9208) / (upvotes_count + downvotes_count + 2) - " +
            "1.96 * SQRT(((upvotes_count + 1 + random) * (downvotes_count + 1)) / (upvotes_count + downvotes_count + 2) + 0.9604) / " +
            "(upvotes_count + random + downvotes_count + 2)) / (1 + 3.8416 / (upvotes_count + random + downvotes_count + 2)) " +
            "AS ci_lower_bound, posts.*")

這個答案也可能是褻瀆神靈,我不確定我是否會這樣做,但是這就是您可能會做的事情

# app/models/post.rb
class Post < ActiveRecord::Base
  def self.custom_select_query
    select("((upvotes_count + 1 + #{random(100)} + 1.9208) / (upvotes_count + downvotes_count + 2) - " +
      "1.96 * SQRT(((upvotes_count + 1 + #{random(99)}) * (downvotes_count + 1)) / (upvotes_count + downvotes_count + 2) + 0.9604) / " +
      "(upvotes_count + #{random(98)} + downvotes_count + 2)) / (1 + 3.8416 / (upvotes_count + #{random(97)} + downvotes_count + 2)) " +
      "AS ci_lower_bound, posts.*")
  end

  private

  def self.random(max)
    SecureRandom.random_number(max)
  end
end

然后將其Post.custom_select_query

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM