[英]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')
您忘記了each
: FooTable.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.