@de_iiah_teji9_iiace

Как вывести в вьюху по заданому значению?

Есть вьюха, которая выводит список тасков. У тасков есть булевское поле done. Хочу вывести только те таски у которых значения done будет true.
Вьюха
<table>
  <thead>
  <tr>
    <th></th>
    <th colspan="3"></th>
  </tr>
  </thead>

  <tbody>

  <% @tasks.each do |task| %>
      <tr>
        <td><%= link_to task.name, edit_task_path(task) %></td>
        <td><%= task.done? %></td>
        <td><%= link_to 'Show', task %></td>
        <td><%= link_to 'Destroy', task, method: :delete, data: {confirm: 'Are you sure?'} %></td>
      </tr>
<% end %>
  </tbody>
</table>
<br>


Контроллер
def index
    @tasks = Task.all
    #@tasks = Task.all.sort_by! {|a| a.done?}
    #@tasks = Task.all.sort {}
  end

Не могу понять как обратиться по полю.
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
@de_iiah_teji9_iiace Автор вопроса
Понял сам. У вьюху надо было добавить <% if task.done %> или <% unless task.done %>
<% @tasks.each do |task| %>
    <% if task.done %>
      <tr>
        <td><%= link_to task.name, edit_task_path(task) %></td>
        <td><%= task.done %></td>
        <td><%= link_to 'Show', task %></td>
        <td><%= link_to 'Destroy', task, method: :delete, data: {confirm: 'Are you sure?'} %></td>
      </tr>
    <% end %>
  <% end %>
  </tbody>
</table>
<br>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@niko1aev
Удобно сделать scope done, not_done и использовать их

<% @tasks.done.each do |task| %>
...
<% end %>


Чтобы сделать scope, надо в app/models/task.rb прописать

scope :done,             -> { where(done: true) }
scope :not_done,      -> { where(done: false) }


К слову scope конечно же надо использовать не только во вьюхах, можно сразу в контроллере
@tasks = Task.done
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы