Как обработать флажок с двумя массивами и, если в одном массиве пользователь нажимает на флажок, который должен добавляться во второй массив - PullRequest
0 голосов
/ 11 января 2019

@complete[] и @incomplete[] - это два массива, тогда мне нужно использовать эти массивы с флажком. Полный массив по умолчанию имеет значение true, а по умолчанию - false.

<%= form_with(model: @task, local: true) do |form| %>
    <% @complete = Array.new %>
    <% @incomplete = Array.new %>

    <% @tasks.each do |task| %>
        <% if task.complete != false then %>
            <% @complete << task.name %>
        <% else %>
            <% @incomplete << task.name %>
        <% end %>
    <% end %>
    <!-- complete task -->
    <%= @complete %>
    <!-- incomplete task -->
    <%= @incomplete %><br>
    <% @complete.each do |i| %><div id = "task_check">
        <%= form.check_boX "@incomplete[]", incomplete.id  %>
        <%= form.check_box "chkbox_ary[#{i}]" , {checked:true} %>
        <%= form.submit "update"%>
        <%= content_tag(:strike, i)%>
        <br></div>
    <% end %>
    <br> <hr>
    <script>
    <% @incomplete.each do |i| %>
        <%= form.check_box "chkbox_ary[#{i}]" %>
        <%= form.submit "update"%>
        <%= i %><br>
    <% end %>
<% end %>

Если я установил флажок как ложный в завершение, то он должен добавить к массиву, называемому завершенным, и если я установил флажок true в неполном, тогда он должен добавить ко второму массиву, названному завершенным.

1 Ответ

0 голосов
/ 11 января 2019

Если можно, я хотел бы сначала указать на некоторые стилистические проблемы в вашем коде:

  • необычно сравнивать с false, т. Е. if task.complete != false должно быть просто if task.complete это работает благодаря концепции Истины в Ruby
  • вы можете просто опустить then в условном условии, это то, что делает большинство разработчиков Ruby, то есть if task.complete then может быть просто if task.complete
  • шаблоны представления (.erb файлы) должны содержать как можно меньше логики, то есть извлекать создание массивов @incomplete и @complete в ваш контроллер или в другое место
  • Ruby Enumerable имеет много методов, облегчающих общую работу, например, разделение коллекции на две коллекции можно выполнить с помощью partition, т. Е. Вы можете сделать @complete, @incomplete = @tasks.partition(&:complete) для заполнения полной и неполной информации. массивы (&:complete - сокращение от { |task| task.complete }, google Ruby symbol to proc, если вы хотите узнать больше об этом)

Я не уверен, что понимаю ваш вопрос таким, какой он есть. В то время, когда существуют полные и неполные массивы, никакого взаимодействия с пользователем не происходит. Т.е. никто не может ничего щелкнуть. Когда рендеринг HTML, больше не существует массивов. Таким образом, я могу интерпретировать ваш вопрос двумя способами:

  1. Вы хотите переместить элементы DOM вокруг => вам нужно использовать JavaScript для этого
  2. Вы хотите разделить флажки при отправке формы => вам нужно показать нам код в вашем контроллере, который обрабатывает отправку формы, чтобы мы помогли вам

Что это?

PS: я знаю, что это не ответ прямо сейчас, но я не мог написать это как комментарий, так как он слишком длинный и комментарий был бы неразборчивым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...