在Ruby on Rails中添加一个数组

时间:2011-01-28 17:23:05

标签: mysql ruby-on-rails ruby arrays

我正在编写一个ruby函数,它从数据库中获取一个表,然后根据数据创建一个数组。它是这样写的:

  def listSome
    @foos = Array.new
    FooTable.find(:all) do |foo|
      @foos << foo if foo.name == "Bar"
    end
  end

我遇到的问题是只有查询的第一个元素被添加到数组中。我已经检查过FooTable.find(:all)在控制台中返回我认为应该的内容,并且可以循环它的结果(我在每个循环上打印结果,它找到了它正在寻找的东西)。但是,我怀疑,对于数组/集合的连接存在一些我不理解的问题。为什么我只将查询的第一个结果添加到我的数组中?感谢。

2 个答案:

答案 0 :(得分:8)

您正在为find方法提供一个块,该方法不会针对它返回的数组的每个元素运行它。根据{{​​1}}返回的each方法提供您的阻止。

find

另外,假设这是实际代码而不是一个例子,有一种非常糟糕的方法来获取具有特定名称的foos。

rails 2

FooTable.find(:all).each { |foo| ... }

rails 3

@foos = FooTable.find(:all, :conditions => ['name = ?', 'Bar'])

答案 1 :(得分:0)

您忘记了eachFooTable.find(:all).each do |foo|

但是我会发表更多评论,你应该使用更多map/select/reject/inject而不是each

def listSome
  @foos = FooTable.find(:all).select do |foo|
    foo.name == "Bar"
  end
end

但是尽可能使用更多的SQL而不是Ruby:

def listSome
  @foos = FooTable.where(:name => "Bar")
end