假设您有countries
has_may
states
。如果将db放入一个看起来像[['America', ['Hawaii','Texas']], ['Australia', ['Queensland','Victoria','New South Whales']]]
的数组中,我希望能够将它们拉出来。显然,当国家是第一个值,然后下一个值嵌套在其中has_many
关联
我不确定如何让它们看起来像这样。 pluck
只能获得州或国家/地区,但我认为它不能同时获得并将它们排序为这样的数组。
我确定它简单但无法弄清楚如何去做。
答案 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)