2017-09-13 85 views
0

在視圖中,我得到一個模型對象數組:@tasks。任務屬於屬於公司的項目。對於我的觀點,我想創建具有uniq組織名稱選項的選擇標籤。這是我現在的代碼:Rails選擇具有唯一值的標記

<%= select_tag :organization, options_for_select(@valid_tasks.collect{|t| [ t.project.organisation.name, t.project.organisation.name ]}),include_blank: "", :onchange => "filterTable(this, 'Organization', 'taskInformation')", class: 'form-control pull-right' %> 

它的作品,但它顯示所有組織的名稱,所以我有很多重複。

@valid_tasks是模型對象的數組模型,它是由函數創建:要做到這一點

relevantTasks = [] 
     userCards.each do |card| 
      task = Task.find_by trello_id: card['shortLink'] 
      if task && task.name && valid_task_name(task.name) && task.label && task.list && (task.list.upcase != "PRODUCTION") 
       if task.project_id 
        relevantTasks << task 
       end 
      end 
     end 
return relevantTasks 
+0

,你能否告訴我們您定義'@ valid_tasks'的代碼? – Pavan

+0

userCards與每個卡片和id散列 – Mark

回答

1

對於選擇標籤,我想你可以只調用.uniq數組對象:

<%= select_tag :organization, options_for_select(@valid_tasks.map {|t| [ t.project.organisation.name, t.project.organisation.name ]}.uniq), include_blank: "", :onchange => "filterTable(this, 'Organization', 'taskInformation')", class: 'form-control pull-right' %> 

您也可以提高以下功能:

userCards.map do |card| 
    task = Task.find_by(trello_id: card['shortLink']) 
    task if task && task.name && valid_task_name(task.name) && task.label && task.list && (task.list.upcase != "PRODUCTION") && task.project_id 
end.compact 

注意如何我正在刪除relevantTasks,因爲.map已經返回一個數組。

我不知道你的代碼看起來如何,但我也想移動valid_task_name(task.name)一類方法,因爲這樣的:

class Task 
    # ...more code 

    def has_valid_name? 
    # Perform task's name validation here 
    # and return true or false 
    end 

    # ...more code 
end 

,這將使你打電話task.has_valid_name?

0

最好的辦法是,你必須在你的控制器或模型過濾數據。你可以使用ruby uniq方法來過濾數組。

<%= select_tag :organization, options_for_select(@valid_tasks.uniq! {|t| t.project.organisation.name}.collect{|t| [ t.project.organisation.name, t.project.organisation.name ]}),include_blank: "", :onchange => "filterTable(this, 'Organization', 'taskInformation')", class: 'form-control pull-right' %>