【发布时间】:2013-02-15 05:37:52
【问题描述】:
大家好,我想添加一个这样的函数,它可以将随机记录返回给我的结构中存在的所有活动记录模型。我该怎么做呢?
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
【问题讨论】:
标签: ruby-on-rails activerecord
大家好,我想添加一个这样的函数,它可以将随机记录返回给我的结构中存在的所有活动记录模型。我该怎么做呢?
def self.random
if (c = count) != 0
find(:first, :offset =>rand(c))
end
end
【问题讨论】:
标签: ruby-on-rails activerecord
【讨论】:
尽管您可以直接使用 sql,但我将把它留在这里以供将来参考,以便将类方法添加到所有 ActiveRecord 对象。
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
将此模块作为“包含 ModelsMethods”包含在您的所有模型中。该模块可以包含您想要跨模型使用的所有方法。
【讨论】: