2012-09-25 40 views
0

我在控制檯下:rails slice-我做錯了什麼?

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給出了一個Hash,其中包含User的一個實例的用戶模型的所有屬性......一切都保存在數據庫中。

+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 

無切片和清潔,快速執行的Ruby代碼。