铁路切片 - 我做错了什么?

时间:2012-09-25 23:13:37

标签: ruby-on-rails-3

我在控制台中执行以下操作:

 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”]?

2 个答案:

答案 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代码。