如何根据体重分配访客

时间:2017-03-22 11:26:00

标签: ruby-on-rails ruby ruby-on-rails-4 model

在我的应用程序中,我有模型Post& Image&我将nested_attributes用于Image

class Post < ActiveRecord::Base
  has_many :images
  accepts_nested_attributes_for :images, reject_if: :all_blank, allow_destroy: true

class Image < ActiveRecord::Base
  belongs_to :post, :counter_cache => true

我的应用程序的目的是,在每个访问/访问者上,我只显示 ONE images发布给用户。目前我只选择random图片。

rnd = @post.images.sample

这样做很好,但我正在寻找的是分发访问者基于weight我添加到每个图片

默认weight可以 10 。例如,我在该帖子上有6个图像weights是:

Image 1 => weight 10
Image 2 => weight 20
Image 3 => weight 50
Image 4 => weight 30
Image 5 => weight 60
Image 6 => weight 10

我想要实现的是根据image weights将访问者分配到每个图片,因此Image 5会吸引大多数访问者,但我们仍会将访问者发送到Image 1&amp;其他图片。

我尚未将weight添加到images,因此可以将其更改为所需的任何内容。

1 个答案:

答案 0 :(得分:0)

我使用了这个gemweighted_distribution。我做了一些测试,效果非常好。

唯一重要的是,您array必须看起来像是hash

{'object-1' => weight, 'object-2' => weight, 'object-3' => weight, 'object-4' => weight}

我的代码:

suits = @post.images.pluck(:id, :weight).to_h