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

为什么 slice 不返回 [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.attributes给出一个包含 User 实例的 User 模型的所有属性的 Hash ... 保存在数据库中的所有内容。

于 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 回答