構造内に存在するすべてのアクティブなレコード モデルにランダム レコードを返す、このような関数を追加したいと思います。どうすればいいですか?
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
構造内に存在するすべてのアクティブなレコード モデルにランダム レコードを返す、このような関数を追加したいと思います。どうすればいいですか?
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
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
/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」としてすべてのモデルに含めます。このモジュールには、モデル全体で使用するすべてのメソッドを含めることができます。