1

私とランダムな「記事」を見つけるメソッドを作成したいと思います。問題は、データベースを反復処理する方法がわからず、見つからない場合に例外を取得しないことです。それがどのように機能すると思いますか(レールウェイではないことは知っていますが、他に手がかりはありません)Class.firstからClass.lastまでの番号をRandして、存在するかどうかを確認します(削除される可能性があります)。ランダム化された ID によるオブジェクト。

このようなもの:

1.9.3p194 :009 > def test
1.9.3p194 :011?>   until Task.exists?(x)
1.9.3p194 :012?>     print "hmmmmmm"
1.9.3p194 :013?>     x = rand(1..10)
1.9.3p194 :014?>     end
1.9.3p194 :015?>   end

(メソッドがここまで機能すると、指定された基準がさらに追加されます)

4

2 に答える 2

1

ActiveRecordを使用する場合は、RecordNotFound例外をキャッチして、メソッドを再帰的に呼び出す必要があります。他のORMの場合は、他の例外をキャッチしようとします。

def ran_find
  x = rand(1..100)
  Task.find(x)
rescue ActiveRecord::RecordNotFound => e
  puts 'hmmmm'
  ran_find
end

x値が複数回満たされる可能性があるため、最適な実装ではありません。しかし、それは機能します。

于 2012-09-06T23:29:52.937 に答える
1

ActiveRecord の :offset オプションを使用してランダム レコードを取得することを好む人がいます。これは、この RecordNotFound 例外を回避するためです。

Toby Hedeから取得: ActiveRecord のランダム レコード

offset = rand(Model.count)

rand_record = Model.first(:offset => offset)

于 2012-09-21T16:15:04.317 に答える