我正在尝试基于模型中的ActiveRecord查询创建哈希
quit_reasons
来自has_many关联的回复
reasons = quit_reasons.inject({}) do |result, element|
result[element.name] = element.id
end
我一直在
undefined method `[]=' for 2:Fixnum
我不知道为什么
答案 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)
块需要返回结果。在散列上使用merge
或update
可以实现什么:
reasons = quit_reasons.inject({}) do |result, element|
result.update(element.name => element.id)
end