【问题标题】:How can i get a complete list including nested relations?如何获得包含嵌套关系的完整列表?
【发布时间】:2012-03-20 11:28:09
【问题描述】:

我有一个与活动相关的任务模型,我想获得一个包含所有任务及其相关活动的数组/哈希,如下所示:

<% task_group =[
     ['Task1', {'Activity1' => 1, 'Activity2' => 2}], 
     ['Task2', {'Activity3' => 3, 'Activity4'=> 4}]
    ] %>

我想出了Task.includes(:activities).all.map(&amp;:name),但这只会给我一个包含活动及其名称的列表。

如何获得包含嵌套关系的完整列表?

我的模型定义:

class Task < ActiveRecord::Base
  has_many :activities

class Activity < ActiveRecord::Base
  belongs_to :task

【问题讨论】:

  • 你为什么要做.map(&amp;:name)部分,是为了什么?
  • 我认为我需要使用 .map 来获取某种数组?
  • 不,获取数组调用.all.to_a
  • 你想要这个:[ ['Task1', 'Activity1'], ['Task1', 'Activity2'], ['Task2', 'Activity3'], ['Task2', 'Activity3'] ]?你到底想要哪种结构?
  • 啊,我必须 rtfm。我认为我需要上述结构(task_group)来进行 group_select。这很容易:f.input :activity_id, :as =&gt; :grouped_select, :collection =&gt; Task.all, :group_method =&gt; :activities。感谢您的帮助。

标签: ruby-on-rails ruby-on-rails-3 activerecord map associations


【解决方案1】:

你可以使用:

Task.includes(:activities).all.map{|t| [t.name, t.activities.inject({}){|H, a| H[a.name] = a.id; H}]}

编辑:

Task.includes(:activities).all.map{|t| [t.name, t.activities.inject({}){|h, a| h[a.name] = a.id; h}]}

【讨论】:

  • 这看起来不错,但是在这部分 '|H, a|' 上出现错误'形式参数不能是常数'
猜你喜欢
  • 2016-03-16
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
相关资源
最近更新 更多