3

我有这个查询

= f.select(:city, Country.where(:country_code => "es").collect(&:cities) {|p| [ p.city, p.id ] }, {:include_blank => 'Choose your city'})

问题是我收到以下错误

SyntaxError: (irb):26: both block arg and actual block given

collect(&:cities)从我看到的情况来看,我通过包含然后声明块做错了。有没有办法可以用相同的查询来完成这两者?

4

1 回答 1

8
Country.where(:country_code => "es").collect(&:cities)

完全一样

Country.where(:country_code => "es").collect {|country| country.cities}

这就是您收到错误的原因:您将两个块传递给该collect方法。你实际上的意思可能是这样的:

Country.where(:country_code => "es").collect(&:cities).flatten.collect {|p| [ p.city, p.id ] }

这将检索国家,获取每个国家/地区的城市列表,将数组展平为您只有一个一维数组,然后返回您的数组以供选择。

由于每个国家代码可能只有一个国家,您也可以这样写:

Country.where(:country_code => "es").first.cities.collect {|p| [ p.city, p.id ] }
于 2012-04-23T21:07:52.163 回答