2014-12-10 4 views
0

ActiveRecord 객체 또는 해시 배열을 반환하는 코드가 있습니다. 첫 번째는 "경우는"ActiveRecord 객체 또는 해시 배열을 반환하는 뷰를 처리하는 방법

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 

그래서 내가 얻을 수있는 조건에 따라 SQL 쿼리를 통해 해시의 배열을 돌려 다음 중 하나를

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> 

I 루프 등을 통해 내가 얻은 해시의 part_groups 배열 :

undefin 에드 메서드 '이름'#

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

+0

'part_group.is_a? (Array)'라고 말하면 루프를 넘기 전에 확인을 할 수 있습니다. – Anthony

+1

@evanbikes는 답을 일관성있게 만들어줍니다. 또한 if/else 문을 추후에 추가해야 할 경우 공용 변수를 통해 메서드의 끝에서 처리하는 것이 좋습니다. –

답변

0

Ruby 객체의 메소드를 호출하거나 해시처럼 취급하는 로직을 사용할 수는 있지만, 동일한 유형의 객체를 반환하는 메소드는 더 깨끗하고 (더 나은 방법이 될 수 있습니다.)

따라서 적절한 지점에서/elsif/else 인 경우 Ruby 개체를 Hash 또는 Hash to Ruby 개체로 변환하십시오.

첫 번째

은 루비 해시로 개체를 회전, 가장 쉬운 :

@part_groups = @part_groups.map(&:attributes)

두 번째, 당신은

@part_groups = @part_groups.map { |pg| PartGroup.instantiate pg } 할 수있는 클래스의 인스턴스로 해시를 켭니다.

물론 일 수 있습니다. 해시처럼 Ruby 개체를 처리하면됩니다. part_group['name']은 해시 또는 Ruby 개체에서 원하는 것을 제공합니다. 그러나 그 방법은 여전히 ​​다른 것들을 반환 할 것이고 잠재적으로 미래에 동일한 문제 또는 혼란을 야기 할 수 있습니다.

+0

좋은. 이상적으로 나는 루비 객체를 변환하고 싶다. 문제는 내 모델에 묶음 또는 관계가 있고 질의 인턴이 묶음 또는 조인을 사용하고 있다는 것입니다. 그래서 루비 객체로 변환하면 part_groups에서만 관계를 얻습니다. 관계를 객체에 포함하려면 어떻게해야합니까? – isea

관련 문제