我是rails的新手,需要一些帮助来迭代sql结果。
我的模型中有一个使用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) %>
然后我得到了这个尴尬的#&lt; CountryTable:0x30509bc&gt;而不是为源中的每个选择选项显示的国家/地区名称:
<option value="#<CountryTable:0x30509bc>">#<CountryTable:0x30509bc></option>
<option value="#<CountryTable:0x3050944>">#<CountryTable:0x3050944></option>
<option value="#<CountryTable:0x30508e0>">#<CountryTable:0x30508e0></option>
我对rails很陌生,我甚至可能不会这样做。
答案 0 :(得分:0)
即使在find语句中放入:select语句,它仍将返回模型类(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
将这些结果组合成一个新数组,该方法返回该结果。
作为旁注,模型的名称应该只是“Country”,而不是“CountryTable”。在Rails中,模型以它们所代表的对象命名。因此,如果您的模型是“国家/地区”,则每个对象(模型的数据库表中的每一行)代表一个国家/地区。