2015-10-04 118 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|