2

id、message、read、view_countのフィールドを持つモデルメッセージがあります。ビューカウントは別のテーブルから計算されますが、メッセージモデルには含まれていません

私がやりたいのは、すべてのメッセージをループし、すべての未読(read = false)と未読ごとのビュー数を追跡して、次のようなものを出力することです。

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

次のようなメッセージをループしている間:

Messages.each do |m|
end

ループ内で、message.idとview_countをキャプチャする配列を作成するにはどうすればよいですか。そして、どうすれば最終結果を出力できますか?

ありがとうございました

4

3 に答える 3

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,
}
于 2013-03-14T03:05:34.120 に答える
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]]
于 2013-03-14T03:38:27.523 に答える
0

これを試して:

Message.where(:read => false).map{ |m| [m.id, m.view_count]}
# => [ [ 1, 14], [ 2, 31], [ 3, 1]]
于 2013-03-14T03:30:56.103 に答える