所以我有这个哈希:
[#<Post id: 4, content: "This is a new post", user_id: 12, created_at: "2013-12-16 16:52:33", updated_at: "2013-12-16 16:52:33">]
据我所知哈希是在一个数组中,所以我的数组中有很多哈希名为@posts
现在我想将哈希中的信息打印到页面上。例如,它可以显示创建时间,然后显示帖子的内容。
问题是我并不真正理解ruby的for i in array
语法。我知道我需要创建一个for循环来获取每个哈希,然后另一个循环来获取我想要的任何信息,但ruby语法对我来说是一个关于该主题的事。...
答案 0 :(得分:1)
Ruby中很少使用for
循环。我认为使用它并不是那么糟糕,但each
方法确实减少了副作用的可能性。
“For vs Each in Ruby”解释得很清楚。
答案 1 :(得分:1)
我认为阅读Ruby loops会有所帮助!
就您的问题的解决方案而言,您可以使用each
类的Array
方法循环遍历数组的每个元素:
@posts.each do |post|
puts post.content
end
上面的代码循环遍历@posts
数组中的每个元素,在本例中为Post
的实例,然后打印content
对象的post
属性所持有的值在当前循环索引。
答案 2 :(得分:1)
#<Post id: 4, content: "This is a new post", user_id: 12, created_at: "2013-12-16 16:52:33", updated_at: "2013-12-16 16:52:33">
不是Hash
,它是ActiveRecord对象。
您可以使用以下表示法访问ActiveRecord模型属性:
instance.attribute
在您的情况下,假设post
是持有对象的变量:
post.created_at
看起来该对象存储在一个数组中。因此,请务必先从数组中提取项目。
您可以通过要求实例返回Hash属性并循环遍历它们来查看所有模型属性:
post.attributes.each do |key, value|
puts "#{key}: #{value}"
end
您可以识别它是一个对象而不是Hash,因为相应Hash的符号将是:
=> {:id=>4, :content=>"This is a new post", :user_id=>12, :created_at=>"2013-12-16 16:52:33", :updated_at=>"2013-12-16 16:52:33"}
答案 3 :(得分:1)
严格来说:
要获取post
对象的属性 - 值对,请使用attributes
方法:
post = Post.first
post.attributes.each do |attr, value|
puts "#{attr}: #{value}"
end
答案 4 :(得分:0)
数组中的内容不是哈希,它是Post
对象:
post_array = [#<Post id: 4, content: "This is a new post", user_id: 12, created_at: "2013-12-16 16:52:33", updated_at: "2013-12-16 16:52:33">]
post_array.each do |post|
p post.id
p post.content
#etc
end