2016-06-24 3 views
0

オブジェクトモデルのビデオに基づいてプログラミングスケジュールを作成する。 毎日タスクを実行して、このモデルをシャッフルして、毎日のプログラミングが異なるようにしたいと思います。Railsでデータモデルを効率的にランダム化する方法

私は知っている product.shuffle.all ex。しかし、私は毎回毎回そのような注文を保存して、各サーバーコールごとに保存しておきたい。

私は各製品に注文する整数を注文するという名前の属性を追加することを考えています。この場合、すべての製品に対してproduct.orderだけをシャッフルする方法はありますか?

これが最も効率的な方法でしょうか?助けてくれてありがとう!

答えて

2

randomパラメータはshuffleです。それは、安定したランダム化を可能にする:

# When the Random object's seed is different, multiple runs result in different outcome: 

pry(main)> [1,2,3,4,5,6,7].shuffle(random: Random.new) 
=> [5, 6, 3, 4, 1, 7, 2] 
pry(main)> [1,2,3,4,5,6,7].shuffle(random: Random.new) 
=> [1, 7, 6, 4, 5, 3, 2] 


# When the Random object is created with the same seed, multiple runs return the same result: 

pry(main)> [1,2,3,4,5,6,7].shuffle(random: Random.new(1)) 
=> [7, 3, 2, 1, 5, 4, 6] 
pry(main)> [1,2,3,4,5,6,7].shuffle(random: Random.new(1)) 
=> [7, 3, 2, 1, 5, 4, 6] 

年間の日数で、結果のランダム化がいつ変化するかを判断できます。任意の日にランダム化を復元することができます(明らかに)。

+0

ああ!これは興味深いアプローチです。この場合、私はできるでしょう - products = products.shuffle(ランダム:Random.new(Data.today.yday()) 毎日変更するたびに同じシャッフルされた商品配列を取得するユーザーの場合 – Yasir

+0

はい、シードと製品リストの両方が同じままでログに記録され、後者が障害になる可能性があります。 –

+0

シャッフルが新製品を含むように変更する製品は意味があります。 – Yasir

0

paper_trailproduct.shuffle.allupdate_attributesのDB呼び出しの組み合わせで、あなたがしたいと思うことは最もよいでしょう。そうすれば、DBで更新された過去のバージョンを見ることができます。

+0

ありがとうございます!いったん私が製品をシャッフルすると、シャッフルされた注文値を各製品のproducts.order属性に関連付ける必要はありませんか?その後、update_attributesを実行しますか? – Yasir

+0

アトリビュートをシャッフルして属性の異なる順番でモデルを更新すると、新しいオーダーを保存してペーパートレイルで変更を追跡することができます。 – Tommyixi

関連する問題