最も人気のあるものを表示オプションに追加する作業を行っています。この方程式が私が使用したいものかどうかはわかりませんが、数学は私の質問の不遜な部分であると思いますが、提案された改善は無料です.
私の問題は "@cards.pop = (@W + @R) + ((1 - @W) * @R0)" にあります。"undefined method `pop=' for nil:NilClass" エラー コードが表示されます。文字列配列に値を追加して、それを他の「表示」オプションのように並べ替えオプションとして使用することはできますか?
また、他に目にするものを自由に選んでください。言われなければ学べない。
事前にご協力いただきありがとうございます、イアン
if params[:view].present?
if params[:view] == 'new' #Sort newest to oldest
@cards = Card.order('created_at DESC').page(params[:page])
elsif params[:view] == 'old' #Sort oldest to newest
@cards = Card.order('created_at ASC').page(params[:page])
elsif params[:view] == 'talk' #Sort most talked about
@cards = Card.order('comments_count DESC').page(params[:page])
elsif params[:view] == 'pop' #Sort most popular
# http://math.stackexchange.com/questions/41459/how-can-i-calculate-most-popular-more-accurately
@cards = Card.all
@R0 = Card.average("score")
@nMax = Card.maximum("votes_count")
@cards.each do |card|
@R = card.score
@n = card.votes_count
@W = @n / @nMax
@cards.pop = (@W + @R) + ((1 - @W) * @R0)
end
# Need to add a Cards.order line - Not sure how to go about this.
else
@cards = Card.order('score DESC').page(params[:page])
end
else
@cards = Card.order('score DESC').page(params[:page])
end
カードテーブル
=> Card(id: integer, user_id: integer, event: text, created_at: datetime, updated_at: datetime, score: integer, comments_count: integer, votes_count: integer)
投票表
=> Vote(id: integer, user_id: integer, card_id: integer, up: boolean, created_at: datetime, updated_at: datetime)