从ruby中获取哈希信息

时间:2013-12-16 18:25:32

标签: ruby-on-rails ruby

所以我有这个哈希:

[#<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语法对我来说是一个关于该主题的事。...

5 个答案:

答案 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)

严格来说:

  1. 那不是哈希,那是一个Post对象。
  2. 哈希不是阵列。
  3. 要获取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