在视图中我得到了一个模型对象数组:@tasks。任务属于属于公司的项目。对于我的观点,我想创建具有uniq组织名称选项的选择标记。这是我的代码:
<%= 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 :(得分:1)
对于select标签,我认为您只需在数组对象上调用.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?
答案 1 :(得分: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' %>