我有这块代码返回ActiveRecord对象或哈希数组。第一个" if"通过sql查询返回哈希数组
if @parts_search_ids.any?
@part_groups = Kaminari.paginate_array(PartGroup.search_part_groups(@parts_search_ids)).page(params[:page]).per(25)
# @part_groups = Kaminari.paginate_array(PartGroup.search_part_groups(@parts_search_ids)).page(params[:page]).per(25)
# @part_groups = PartGroup.parts_group_by_name(@parts_search_ids).page(params[:page]).per(25)
elsif @filter == 'all_parts'
@part_groups = Kaminari.paginate_array(PartGroup.all).page(params[:page]).per(25)
else
@part_groups = Kaminari.paginate_array([]).page(params[:page]).per(25)
end
因此,根据条件,我得到:
part_group = {"name"=>"170128", "part_category"=>"0", "critical_part"=>"f", "part_groups_count"=>"1", "project"=>"CW01"}
或
part_group = #<PartGroup id: 1249, name: "KIT.LTE.OVLY.HUA.3CAR", part_category_id: 278, created_at: "2013-12-03 01:32:32", updated_at: "2013-12-03 01:32:32", always_show_group: false, critical_part: false>
当我循环遍历我得到的part_groups哈希数组时:
未定义的方法`name&#39;对于#
处理此问题的最佳方法是什么?
答案 0 :(得分:0)
您的视图中肯定有逻辑可以调用Ruby对象上的方法或将其视为散列,但对于返回相同类型对象的方法,它会更清晰(并且更好)。 / p>
因此,在/ ifsif / else的相应分支中,要么将Ruby对象转换为Hashes,要么将Hashes转换为Ruby对象。
第一个是最容易的,将Ruby对象变成哈希:
@part_groups = @part_groups.map(&:attributes)
第二,将哈希变成你班级的一个实例
@part_groups = @part_groups.map { |pg| PartGroup.instantiate pg }
。
当然,可以将Ruby对象视为Hash:part_group['name']
将从散列或Ruby对象中提供您想要的内容。但是,这种方法仍然会返回不同的东西,可能会导致同样的问题,或者只会引起混淆。