コンソールで次のことを行います。
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
スライスが[name: "Joe"]を返さないのはなぜですか?
コンソールで次のことを行います。
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
スライスが[name: "Joe"]を返さないのはなぜですか?
ハッシュを配列に埋め込んでいます!
このようにしてみてください:
@user = {name: "Joe", age: "17"}
@user.slice(:name)
name と id のみの配列を取得するにはUser.all
:
array = User.all.map { |u| u.attributes.slice(:name, :id) }
map
各要素のコード ブロックで指定した内容を実行し、それを使用して配列を作成します。これが返され、上記の例u
の変数に入れられます。array
u.attributes
User のインスタンスの User モデルのすべての属性を含むハッシュを提供します...すべてがDBに保存されます。
提供された限られた情報に基づいて、配列操作のオーバーヘッドが必要な理由がわかりません。代わりに 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 コード。