我在控制台中执行以下操作:
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”]?
答案 0 :(得分:1)
您正在将哈希嵌入数组中!
试试这样:
@user = {name: "Joe", age: "17"}
@user.slice(:name)
要在User.all
上获取仅包含姓名和ID的数组:
array = User.all.map { |u| u.attributes.slice(:name, :id) }
map
执行您在每个元素u
的代码块中提供的内容,并使用它构建一个数组,在上面的示例中返回并放入变量array
。 / p>
u.attributes
给出一个哈希,其中包含用户实例的用户模型的所有属性...保存在数据库中的所有内容。
答案 1 :(得分: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代码。