0

構造内に存在するすべてのアクティブなレコード モデルにランダム レコードを返す、このような関数を追加したいと思います。どうすればいいですか?

  def self.random
   if (c = count) != 0
    find(:first, :offset =>rand(c))
   end
  end
4

3 に答える 3

1

なぜ面倒なのですか?

Model.order("RANDOM()").first

この質問には、より優れたパフォーマンスのクエリがあります

Rails 3: ランダム レコードを取得する

于 2013-02-28T21:03:46.617 に答える
0

ActiveRecordストレートSQLを使用できますが、すべてのオブジェクトにクラスメソッドを追加することについての今後の参照のために、これをここに残しておきます。

class MyActiveRecordBase < ActiveRecord::Base
  def self.random
    if (c = count) != 0
      find(:first, :offset =>rand(c))
    end
  end
end

ここで、このクラスメソッドを使用する各モデルがMyActiveRecordBase

class Model < MyActiveRecordBase
end

class AnotherModel < MyActiveRecordBase
end
于 2013-02-28T21:06:04.857 に答える
0

/lib フォルダーに models_methods.rb としてモジュールを作成します。

このモジュール内にメソッドを作成し、

def rand(model)

   model.order("RANDOM()").first

end

def string_to_url(model)

  model.find(2).name.gsub([^A-Za-z0-9],/ /).downcase)

end

このモジュールを「include ModelsMethods」としてすべてのモデルに含めます。このモジュールには、モデル全体で使用するすべてのメソッドを含めることができます。

于 2013-02-28T21:08:23.310 に答える