我在控制台中执行以下操作:
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"]?
我在控制台中执行以下操作:
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"]?
您正在将哈希嵌入到数组中!
试试这样:
@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 ... 保存在数据库中的所有内容。
根据提供的有限信息,我不确定您为什么需要数组操作的开销。考虑改用 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 代码。