从RoR模型中获取两个随机元素

时间:2009-03-01 07:57:02

标签: ruby-on-rails

我正在尝试使用RoR进行简单的操作,而我在学习基础知识时遇到了一些麻烦。我最接近的背景是ASP.NET MVC,但我发现所有的RoR教程都关注rails真正擅长什么(脚手架的东西)而不是如何制作自己的动作并让他们用参数等来做事。 ASP.NET MVC中的微不足道。

目前我正试图从模型中获取两个随机元素。

我想我正在处理某种类型的ActiveRecord集合?

我已经读过在集合/数组的某个地方有一个.rand方法,虽然其他地方建议rand只是一个获取一个随机数达到一定数量的方法。我甚至无法使用以下代码:

def index
    @items = Array.new(Item[0], Item[0])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @domain }
    end
end

任何可以帮助解决这个问题,并且理想情况下有助于从ASP.NET MVC到RoR的进一步修补将非常感激。

5 个答案:

答案 0 :(得分:6)

从ActiveRecord模型中检索两个随机项:

@things = Thing.all(:order => 'RANDOM()', :limit => 2)

答案 1 :(得分:5)

如果您想要数据库中的2个随机项,请向数据库询问2个随机项:

@items = Item.find(:all, :limit => 2, :order => "RANDOM()")

如果您只使用2,那么加载系统中的所有Item是没有意义的,这是浪费。

如果已经有来自其他地方的数组需要从中获取随机值,那么Rails会向Array类添加rand方法:

@items = [my_arr.rand, my_arr.rand]

我不知道你试图用Item[0]做什么,但这在Rails中没有任何意义。

答案 2 :(得分:3)

你的模特是什么样的?我不确定你在那里用Item [0]做什么。要随机化你的数组,你可以这样做:

@items = ["item1", "item2", "item3"].sort_by {rand}

然后你可以做@items [0]和@items [1]来获得随机数组的2项。

对于params,您可以使用params哈希从查询字符串中获取任何表单变量或请求参数:

params[:user]

符号名称只是查询字符串中表单字段或参数的名称。

Rails控制器通常包含一个或多个restful操作(索引,显示,新建,创建,删除,编辑,更新),如果您将其作为资源进行路由,但添加自己的操作只需添加一个新方法您的控制器,在routes.rb中路由该操作,并使用该操作的名称创建一个视图。

答案 3 :(得分:2)

有关您的型号和更多信息你想要完成什么会有所帮助,但是如果你试图从像sqlite这样的数据库中提取一个随机记录,你可以这样做:

@item = Items.find(:first, :order => 'RANDOM()')

Items是您的模型类。 'RANDOM()'只是一个传递给数据库的字符串,告诉它如何排序,所以你必须调整以匹配你正在使用的数据库。

答案 4 :(得分:2)

使用Mysql数据库使用RAND()而不是RANDOM()

@items = Item.find(:all, :limit => 2, :order => "RAND()")
相关问题