2015-10-04 69 views
0

我有一个包含选定动态数据的HTML页面。而是显示所有任务的数据。需要根据task_type选择任务

我有四种类型的task_type,“工作”,“提醒”,“工作关”和“估计”

我只想显示其中task_type = "work"数据:

<tbody> 

      {% for task in job.tasks %} 

     <tr> 
      <td> 
      <!-- Dates can be formatted with Ruby date syntax --> 
      {{ task.scheduled_at | date: "%m/%d/%y %l:%M %p" }} - 
      {{ task.ends_at | date: "%m/%d/%y %l:%M %p" }} 
      </td> 
      <td>{{ task.name }}</td> 

      <td>{{ task.task_type.name}}</td>  

      <td>{{task.task_employee.name}}</td> 
     </tr> 
     {% endfor %} 

    </tbody> 

我试着一个if声明,但它不起作用。

这是我的代码:

所有的
<tbody> 

      {% for task in job.tasks %} 
       {% if task.task_type.name = "work" then %} 
     <tr> 
      <td> 
      <!-- Dates can be formatted with Ruby date syntax --> 
      {{ task.scheduled_at | date: "%m/%d/%y %l:%M %p" }} - 
      {{ task.ends_at | date: "%m/%d/%y %l:%M %p" }} 
      </td> 
      <td>{{ task.name }}</td> 

      <td>{{ task.task_type.name}}</td>  

      <td>{{task.task_employee.name}}</td> 
     </tr> 
     {% end %} 
     {% endfor %} 

    </tbody> 
+1

是液体? –

+1

使用这个作为循环语句job.tasks.where(task_tyoe:“work”)。each do | task |' –

+0

谢谢,它工作:) –

回答

2

首先,你的代码是 “几乎” 工作。 在您的if声明中,您要求的是name = "work"这是一项任务,它将始终返回true。您的代码可以工作,您可以使用==的比较运算符。使用=导致代码不正确。假设一项工作有10000个任务。这意味着你正在采取所有这些方法,循环遍历每一个,并且只有在type_namework时才制作一些HTML。

最好选择所需的任务,您可以通过使用ActiveRecord的where方法来完成这些任务。

一般

你可以用

Class.where(attribute: value) 
你的情况

使用它,它会

Task.where(type_name: "work") 

我宁愿使用范围:

class Task < ActiveRecord::Base 
    belongs_to :job 

    scope :work, -> { where(type_name: "work") } 
end 

然后你就可以调用范围与Task.work这将使

SELECT * FROM tasks WHERE type_name = 'work' 

在你的模板,然后使用:

job.tasks.work.each do |job|