0

コンソールで次のことを行います。

 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"]を返さないのはなぜですか?

4

2 に答える 2

1

ハッシュを配列に埋め込んでいます!

このようにしてみてください:

@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.attributesUser のインスタンスの User モデルのすべての属性を含むハッシュを提供します...すべてがDBに保存されます。

于 2012-09-25T23:22:14.897 に答える
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 コード。

于 2012-10-01T14:35:01.630 に答える