注入ActiveRecord对象

时间:2014-06-18 12:12:39

标签: ruby-on-rails ruby ruby-on-rails-3

我正在尝试基于模型中的ActiveRecord查询创建哈希 quit_reasons来自has_many关联的回复

reasons = quit_reasons.inject({}) do |result, element|
  result[element.name] = element.id
end

我一直在

undefined method `[]=' for 2:Fixnum

我不知道为什么

3 个答案:

答案 0 :(得分:4)

修复是: -

reasons = quit_reasons.inject({}) do |result, element|
  result[element.name] = element.id
  result
end

原因是Hash#[]=,返回正在分配给。由于此方法Hash#[]=是您的块的最后一个语句,因此#[]=的{​​em>值将被分配给result,这会导致错误下一次Hash#[]=来电。

如果可以的话,我总是尽量使用#each_with_object。虽然该对象作为第一个参数传递,结果作为第二个传递(即与注入相反的方式)

reasons = quit_reasons.each_with_object({}) do |element, result|
  result[element.name] = element.id
end

这是[{1}}和#inject之间重要差异之一。

答案 1 :(得分:0)

该死的我是个白痴。

我忘了返回结果

reasons = quit_reasons.inject({}) do |result, element|
  result[element.name] = element.id
  result
end

答案 2 :(得分:0)

块需要返回结果。在散列上使用mergeupdate可以实现什么:

reasons = quit_reasons.inject({}) do |result, element|
  result.update(element.name => element.id)
end