无法弄清楚如何将结果限制为希望使用.group

时间:2014-03-24 15:15:58

标签: html ruby-on-rails ruby

我正在尝试创建一个下拉列表来过滤表格中的结果。到目前为止,除了列出多个项目外,一切正常。

如:

Clec ID:
216 324
216 315

我只想要一个216.

    <select name="by_clecid">
      <option value="">All</option>
      <% @task_queues.each do |task_queue| %> <option value="<%= task_queue.clecid %>"><%= task_queue.clecid %></option><% end %> 
    </select>

我以为我可以使用.group但不确定如何使用它。非常感谢任何帮助我对Ruby不是很熟悉。

编辑: 模特:

class TaskQueue < ActiveRecord::Base

  require 'task_queue'

  self.table_name = "taskqueue"
  belongs_to :clec_profile
  scope :by_status,     -> status  { where(:status => status) }
  scope :by_tasktype,   -> tasktype  { where(:tasktype => tasktype) }
  scope :by_clecid,     -> clecid  { where(:clecid => clecid) }
  scope :by_taskid,     -> taskid  { where(:taskid => taskid) }
  scope :by_hostname,     -> hostname  { where(:hostname => hostname) }

  def elapsed_seconds
    case status
    when "Completed"
      finishtime - starttime
    when "Pending"
      Time.now - starttime
    when "Waiting", "Failed"
      0
    end
  end

end

一些控制器:

class TaskQueuesController < ApplicationController
  before_action :set_task_queue, only: [:show, :edit, :update, :destroy]
  has_scope :by_status, :by_tasktype, :by_taskid,  :by_hostname, :by_clecid

  def index
    @task_queues = apply_scopes(TaskQueue).all
    @task_queues = @task_queues.paginate(:page => params[:page], :per_page => 30)
  end
end

编辑:  这是一张图片,可以更好地展示正在发生的事情:http://i.imgur.com/SQZZDXC.png 我会把它显示为图像,但还没有足够的代表。

2 个答案:

答案 0 :(得分:2)

ActiveRecord提供uniq方法来生成SELECT DISTINCT ...查询。你可以做例如

@clec_ids = apply_scopes(TaskQueue).uniq.pluck(:clecid)

如果您想重新使用已选择的@task_queues,则可以使用表兄弟方法Array#uniq来确保仅显示唯一的clecid

@clec_ids = @task_queues.map(:clecid).uniq

在你看来,你会做

<select name="by_clecid">
  <option value="">All</option>
  <% @clec_ids do |clec_id| %>
    <option value="<%= clec_id %>"><%= clec_id %></option>
  <% end %> 
</select>

答案 1 :(得分:1)

暂时忽略一些代码,你真正想做的只是从数据库中提取一个可能的clec_id值列表。为此,ActiveRecord提供pluck

@clec_ids = ClecProfile.pluck(:id) #=> [1,2,3,4,5,...]

# alternately...
@clec_ids = TaskQueue.clec_profiles.pluck(:id).uniq #=> [1,2,3,4,5,...]

我认为uniq现在不适合你的原因是你正在查看多个不唯一的关联对象,只是它们的ID。使用pluck获取一组id而不是实例化的ActiveRecord对象可以回避这个问题。