2014-03-24 11 views
1

我想創建一個下拉列表中篩選結果。到目前爲止,除了多個項目正在列出之外,所有工作都在進行。無法弄清楚如何限制結果爲一個有希望使用.group

如:

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> 

我以爲我可以使用。集團,但不完全知道如何使用它。任何幫助將不勝感激我不熟悉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 我會展示它作爲一個形象,但沒有足夠的代表呢。

+0

這是因爲它是從數據庫中拉出的HTML Clec ID列表216兩次以上,我只是以此爲例。我正在尋找一種使用ruby的方法,只有在它不存在的情況下才能使用它。從我所知道的方法.group應該可以工作,但我不完全確定。 –

+0

@ArupRakshit他寫道,一個是選項值,另一個是在選項列表中吐出的實際文本。 – emcanes

+0

@emcanes有道理! :) –

回答

2

ActiveRecord提供了用於生成SELECT DISTINCT ...查詢的uniq方法。例如,你可以做

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

,如果你想重新使用已選定@task_queues,您可以使用表妹方法Array#uniq,以確保只有唯一clecid s的顯示

@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> 
+0

非常感謝!你的例子確實有幫助,現在它正在工作。這是瘋狂的多久你可以花在小東西 –

+0

很高興我能幫上忙。祝你的項目好運! –

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對象避開了這個問題。

+0

噢相信我我知道有很多代碼味道。感謝您的答案,我每天都對Ruby有很多瞭解。 –

相關問題