如何在rails上构建带有ruby的多维数组

时间:2013-03-14 02:59:21

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个模型消息w字段:id,message,read,view_count。查看计数是从另一个表计算的,它不在消息模型中

我想要做的是遍历所有消息并跟踪所有未读(读取=假)和每个未读取的视图计数以输出如下内容:

1, "message stuff", false, 14
2, "message stuff", false, 31
3, "message stuff", false, 1

循环播放如下消息:

Messages.each do |m|
end

在循环中,我如何构建一个捕获message.id和view_count的数组。然后我如何输出最终结果?

谢谢

3 个答案:

答案 0 :(得分:3)

我可以推荐一个哈希吗?

message_hash = {}

Messages.where(:read => false).each do |m|
  messages_hash[m.id] = m.view_count
end

puts messages_hash

假设

class Messages
  def view_count
    #some view_count calculation code.
  end
end

未经测试但应该接近。

输出

{
  11 => 33,
  12 => 11,
  13 => 34,
}

答案 1 :(得分:3)

mes_fields = Array.new
messages = Array.new
mess = Messages.where("read = ?", false)


mess.each_with_index do |m_row, index|
    m_row.each do |m|
        mes_fields.push(m)
    end
    messages.push(mes_fields[index])
end

然后message看起来像

[[1, "message stuff", false, 14],
 [2, "message stuff", false, 31],
 [3, "message stuff", false, 1]]

答案 2 :(得分:0)

试试这个:

Message.where(:read => false).map{ |m| [m.id, m.view_count]}
# => [ [ 1, 14], [ 2, 31], [ 3, 1]]