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

尽管您可以直接使用 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
于 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 回答