2015-10-04 2 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 задач. Это означает, что вы принимаете все из них, перебираете каждый из них и делаете только HTML, если type_name - work.

Лучше выбрать необходимые задачи, которые вы можете использовать с помощью метода ActiveXActiveRecord.

в общем, вы можете использовать его с

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|