在我的应用程序中,我有模型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
,因此可以将其更改为所需的任何内容。
答案 0 :(得分:0)
我使用了这个gem
:weighted_distribution。我做了一些测试,效果非常好。
唯一重要的是,您array
必须看起来像是hash
:
{'object-1' => weight, 'object-2' => weight, 'object-3' => weight, 'object-4' => weight}
我的代码:
suits = @post.images.pluck(:id, :weight).to_h