2010-09-17 63 views
0

我是rails新手,需要一些幫助來迭代sql結果。Rails - 將find_by結果迭代到select下拉列表

我在我的模型中使用的方法find_by:

def self.find_country() 
    @countries = CountryTable.find_all_by_country_status('Y', :select => "country_name") 
    @countries.each do |c| 
    puts "#{c.inspect}" 
    end 
end 

這是我的觀點:

<%= select_tag "country", options_for_select(CountryTable.find_country) %> 

然後我得到這個尷尬#< CountryTable:0x30509bc >代替國家名稱顯示爲源中的每個選項:

<option value="#&lt;CountryTable:0x30509bc&gt;">#&lt;CountryTable:0x30509bc&gt;</option> 
<option value="#&lt;CountryTable:0x3050944&gt;">#&lt;CountryTable:0x3050944&gt;</option> 
<option value="#&lt;CountryTable:0x30508e0&gt;">#&lt;CountryTable:0x30508e0&gt;</option> 

我對軌道很陌生,以至於我甚至可能不會去做這個事情。

回答

0

即使將find語句放在find語句中,它仍會返回模型類(CountryTable)的對象。您需要從對象中提取country_name屬性。

通過轉換每個對象轉換對象數組的最佳方法是使用map

def self.find_country 
    find_all_by_country_status('Y', :select => "country_name").map {|c| c.country_name } 
end 

這通過每個國家,find_all_by_country_status返回到塊。該塊反過來返回國家的國家名稱。然後map將這些結果組合到一個新數組中,並且該方法返回該結果。

作爲一個側面說明,您的模型的名稱可能應該只是「國家」,而不是「CountryTable」。在Rails中,模型以它們所代表的對象命名。所以如果你的模型是「國家」,每個對象(模型的數據庫表中的每一行)代表一個國家。

+0

感謝mckeed,這工作完美! – oprogfrogo 2010-09-17 19:32:39