我如何处理视图获取ActiveRecord对象或返回的哈希数组

时间:2014-12-10 15:18:36

标签: ruby-on-rails ruby arrays activerecord hash

我有这块代码返回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;对于#

处理此问题的最佳方法是什么?

1 个答案:

答案 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对象中提供您想要的内容。但是,这种方法仍然会返回不同的东西,可能会导致同样的问题,或者只会引起混淆。