【问题标题】:ActiveRecord Relation to hash outputActiveRecord 与哈希输出的关系
【发布时间】:2015-07-09 09:52:41
【问题描述】:

我又一次对 ActiveRecord::Relation 大发雷霆。这就是我想要做的:

current_user.jobs.includes(:employee).map {|c| { name: "#{c.employee.name}, hire_date: c.employee.hire_date.strftime("%Y-%m-%d") } }

所以,我有一个 current_user,它有很多工作。我想退还包括员工在内的所有产品。基于此 ActiveRecord 关系,我想根据此关系获取工人的姓名和雇用日期。但是,当我这样做时,我得到了可怕的错误:

NoMethodError - nil:NilClass 的未定义方法“名称”。

我还尝试将 ActiveRecord 关系转换为数组、哈希和 json。在尝试获取名称时,所有这些都返回了相同的错误。

我要做的就是收集:

current_user.jobs.includes(:employee) 并迭代该关系并根据返回的数据创建一个哈希数组。

在这方面有什么想法或推动正确的方向吗?

谢谢

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    尝试使用.employee 方法而不是.worker — 因为您包括employee 模型。

    【讨论】:

      【解决方案2】:

      我不知道为什么你 includes :employee 但引用 :worker 但无论如何,表达式 current_user.jobs 会给你一个工作迭代,所以我很想调用每个元素 @987654325 @。没什么大不了。不知道为什么你有那个插值,那是不需要的。

      这应该可以...

      city_date_hash = current_user.jobs.includes(:employee).map {|j| { city: j.employee.name, hire_date: j.employee.hire_date.strftime("%Y-%m-%d") } }
      

      另外,我不知道为什么employee.name:city 键下...我可能会使用:name:employee_name

      【讨论】:

      • 史蒂夫,你是对的,我在编辑/处理代码之间并在我的问题中输入了错误的代码。我编辑了我的问题。我实际上确实有一些类似于你放在那里的东西,但它不起作用。正如我所提到的,它会引发“NoMethodError - nil:NilClass 的未定义方法‘名称’”错误。查看我更新的问题,了解我有什么。
      • 我刚刚想通了。当我遍历集合时,我有一个 nil 对象。因此,在我遇到正在返回的 nil 对象之前,您所拥有的确实有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 2011-11-02
      • 1970-01-01
      • 2014-02-17
      • 2012-04-04
      相关资源
      最近更新 更多