2012-02-28 3 views
0

각각의 속성 이름을 전달하여 컬렉션 값을 표시하려고합니다.속성 이름을 사용하여 컬렉션 값 표시

@mandates는 활성 레코드 쿼리의 결과입니다.

@tabattributes에는 이전에 사용자가 선택한 속성 이름의 배열이 들어 있습니다.

아래 코드는 필드 특성을 표시하지만 대신이 필드 값을 원합니다.

여러 가지 구문을 시도했지만 오류가 발생할 때마다 발생합니다.

어떻게하면 코드를 수정할 수 있습니까?

@ mandates.map do | f |

@ tabattributes.each {| att | "# {AT & T}"}

답변

0

@mandates이 속성 a, bc@tabattributes와 모델을 포함한 결과 세트의 경우는 배열 %w{a b} (즉, 당신은 @mandates의 각 요소에서 ab을 추출 할) 다음 :

a = @mandates.map { |m| m.attributes.slice(*@tabattributes) } 

'a''b' 키를 사용하여 일련의 해시를 제공합니다. 당신은 단지 값을 원하는 키를 신경 쓰지 않으면 아마도이 당신을 위해 작동합니다

@tabattributes = %w{id created_at} 
slices = @mandates.map { |m| m.attributes.slice(*@tabattributes) } 
# slices is now like [ { 'id' => ..., 'created_at' => ... }, ... ] 

: 예를 들어

@mandates.map { |m| m.attributes.slice(*@tabattributes).values } 

당신에게 배열의-배열을 줄 것이다 그. 첫 번째 해시 배열은 아마도 사용하기 쉽습니다.

당신은 당신이이 같은 것을 사용하여 데이터베이스 내부의 관심이 단지 열을 밖으로 슬라이스 할 수있는 데이터베이스에 액세스하기 전에 @mandates에서 얻을 수있는 경우 :

@mandates = Mandate.select(@tabattributes) 
slices = @mandates.map(&:attributes) 
+0

감사의 너무 많은. 이제 @ mandates.map {| m | m.attributes.slice (* @ tabattributes) .values} – Marc

0

내가 바로 당신을 이해한다면, 그것은 즉 당신은 elements의 배열을 가지고 있고, 각 요소의 name를 포함한 배열을 갖고 싶어? 그렇다면 array.map {|elem| elem.name}해야합니다. 더 짧은 양식 (array.map(&:name))이 있습니다.이 작업이 어떻게 작동하는지에 관심이 있으면 자세히 설명해 드리겠습니다.

관련 문제