2012-09-25 2 views
0

i를 콘솔에서 다음을 수행하십시오레일 슬라이스 - 내가 뭘 잘못하고 있니?

1.9.3p194 :062 > @user = [name: "Joe", age: "17"] 
=> [{:name=>"Joe", :age=>"17"}] 

1.9.3p194 :063 > @user.slice(:name) 
TypeError: can't convert Symbol into Integer 

왜 [: "조"이름] 반환 슬라이스되지 않는 이유는 무엇입니까?

답변

1

해시를 배열에 포함하고 있습니다!

다음과 같이하십시오 :

@user = {name: "Joe", age: "17"} 
@user.slice(:name) 

얻을에만 이름과 ID의 배열을 User.all에 :

array = User.all.map { |u| u.attributes.slice(:name, :id) } 

map 당신이 각 요소 u에 코드 블록에 제공하는 것을 실행하고 빌드 그 배열은 반환되고 위의 예제에서 변수 array에 저장됩니다.

u.attributes은 User ...의 인스턴스에 대한 User 모델의 모든 속성을 포함하는 해시를 제공합니다. 모든 것이 DB에 저장됩니다.

+0

흠. 그래서 나는 어떻게해야 할 것인가? @ user = User.all 그리고 다음과 같은 배열을 얻는다 : name과 : user_id? –

+0

흠 왜 그렇게하고 싶습니까? 어쨌든 대답에 추가하겠습니다. –

0

제공되는 제한된 정보를 기반으로 왜 배열 작업의 오버 헤드가 필요한지 잘 모르겠습니다. 대신 OStruct 사용을 고려하십시오.

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html

당신이 OStruct이 같을 것이다 제공하는 예 :

require 'ostruct' 
@user = OpenStruct.new 
@user.name = "John Smith" 
@user.age  = 17 

puts @user.name  # -> "Joe" 
puts @user.age  # -> 17 

없음 깔끔히 청소, 빠른 실행 루비 코드입니다.

관련 문제