【问题标题】:Given a query that returns [1, 1] [2, 3], [5,1], How to you use that result?给定一个返回 [1, 1] [2, 3], [5,1] 的查询,如何使用该结果?
【发布时间】:2011-02-06 04:21:20
【问题描述】:

给定:

class ThreadParticipations
  scope :unread, lambda{ |user| where(:user_id => user.id, :read => false) }
end

ThreadParticipations
  .unread(current_user)
  .includes(:thread => :project)
  .group('projects.id')
  .count('threads.id')

哪些输出:

 => { 1 => 15, 3 => 10 }

如何使用该结果更新我的列表。在结果集 1 和 3 中给出的是 project_ids,我如何遍历该结果以更新如下列表:

# iterates over @projects
<div>
 <li>Project_id 1, unread count = 15</li>
 <li>Project_id 2, unread count = 0</li>
 <li>Project_id 3, unread count = 10</li>
 <li>Project_id 4, unread count = 0</li>
 <li>Project_id 5, unread count = 0</li>
</div>

谢谢

【问题讨论】:

  • “更新列表”——这是什么意思?像在数据库记录中一样更新?

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


【解决方案1】:

不确定我是否理解,您只是想迭代哈希以输出 html?

<ul>
    <% { 1 => 15, 3 => 10 }.each_pair do |k,v| %>
        <li>Project_id <%= k %>, unread count = <%= v%></li>
    <% end %>
</ul>

编辑:这样吗?

<ul>
    <% [[1,1], [2, 3], [3, 15]].each do |project_id, unread_count| %>
        <li>Project_id <%= project_id %>, unread count = <%= unread_count %></li>
    <% end %>
</ul>

【讨论】:

  • 谢谢,但它不是散列它是一个像 [1,1], [2,3], [5,4] 的数组
  • 为了人们阅读你的代码,请给你的块变量起比kv更有用的名字。字母汤应该是食物,而不是代码。
  • 我知道k,v 代表“键”和“值”,但我很奇怪。我同意例如一些助记符更好。
  • 对我来说kv 更容易理解。
【解决方案2】:

首先:您的 HTML 无效。 li 元素进入 ulol 内部,而不是 div 内部。您要查找的代码是:

<ul>
  <% hash.each do |project_id, unread_count| %>
    <li>Project_id <%= project_id %>, unread count = <%= unread_count %></li>
  <% end %>
</ul>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多