簡體   English   中英

在Ruby on Rails中添加到數組

[英]Adding to an array in Ruby on Rails

我目前正在編寫一個ruby函數,該函數從數據庫中獲取一個表,然后根據數據創建一個數組。 它是這樣寫的:

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

我遇到的問題是只有查詢的第一個元素被添加到數組中。 我檢查了FooTable.find(:all)返回了我認為應該在控制台中返回的內容,並且可以將其結果循環(我在每個循環上都打印了結果,它找到了要查找的內容)。 但是,我懷疑關於串聯到數組/集合的某些事情我不了解。 為什么我只將查詢的第一個結果添加到數組中? 謝謝。

您正在為find方法提供一個塊,該塊不會針對它返回的數組的每個元素運行它。 將您的塊提供給find返回的each方法。

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

另外,假設這是實際代碼而不是示例,那么使用特定名稱獲取foo確實是一種非常糟糕的方法。

欄桿2

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

護欄3

@foos = FooTable.where('name = ?', 'Bar')

您忘記了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM