Rails has_many assosiations into a array

时间:2016-02-20 05:17:54

标签: ruby-on-rails arrays ruby-on-rails-4

假设您有countries has_may states。如果将db放入一个看起来像[['America', ['Hawaii','Texas']], ['Australia', ['Queensland','Victoria','New South Whales']]]的数组中,我希望能够将它们拉出来。显然,当国家是第一个值,然后下一个值嵌套在其中has_many关联

我不确定如何让它们看起来像这样。 pluck只能获得州或国家/地区,但我认为它不能同时获得并将它们排序为这样的数组。

我确定它简单但无法弄清楚如何去做。

3 个答案:

答案 0 :(得分:1)

直接方式:

x = Countries.includes(:states).all

转换为数组的代码(如果你绝对需要它)看起来像:

a = []
x.each do |item|
    y = [ item.name, [] ]
    item.states.each do |state|
        y[1] << state.name
    end
    a << y
end

替换.name的相应列名以从Countries和States对象中获取名称。

答案 1 :(得分:0)

拥有这样的结构不是更实际:

{
  'America' => ['Hawaii','Texas'],
  'Australia' => ['Queensland','Victoria','New South Whales']
}

要做到这一点,你可以这样做:

{}.tap{ |h| countries.each{ |country| h[country.name] = country.states.map(&:name } }

答案 2 :(得分:0)

您可以使用以下内容检索它:

State.select('states.*, countries.name as country_name').joins(:country).group_by(&:country_name)