Rails 4.0.4, хочу чтобы флажки отображались как проверенные, когда item.done == true

0

Я создаю приложение todo в качестве проекта для своего будущего портфолио. В настоящее время ему не хватает многих функций и страдает от нелепо-ужасно-кодовой болезни. Я намерен отполировать его и с некоторой удачей и тонны умения, возможно, однажды он поможет мне получить работу в качестве младшего разработчика или, по крайней мере, стажера ;-)

В настоящее время я занимаюсь грязной борьбой с флажками. Я хочу, чтобы они были (и оставались!) Проверены, имеет ли Item, с которым они связаны, Item.done == true, в противном случае их следует отключить. Я попытался реализовать его в check_box_tag сам, условно добавив check = "checked" prop, если item.done == true, но это не удалось. Хак, который я использую сейчас, имеет несколько недостатков:

0) (Очень жаль, что вы представили вам такой WET, влажный, непристойный MOIST-код) 1) это воплощение очень плохого кода, если я когда-либо видел его 2) он не всегда работает - если вы проверите более одного ящика быстрым последовательность, все ящики будут отображаться как пустые. 3) это просто не кажется правильным, честно говоря

Ссылка на github: https://github.com/Demoniszcze/todo_app

Ссылка на герою: http://murmuring-citadel-7289.herokuapp.com/

_items.html.erb:

<table>
    <tbody>
        <% @items.order('created_at asc').each do |item|%>
            <tr>
                <td><%= check_box_tag "item-#{item.id}", item.id, false, 
                    data: {
                    remote: true,
                    url: url_for(action: :do_item, id: item.id),
                    method: :patch,
                    done: item.done
                    } %>
                </td>
                <td width="300px"><div class="items" id="item-<%= item.id %>"><%= item.content %></div></td>
                <td><%= link_to "delete", item_path(item.id), method: :delete, remote: true %></td>
            </tr>   
        <% end %>
    </tbody>
</table>
<script>
(function() {
    $('input[data-done="true"]').prop('checked', 'checked');
    $('input[data-done!="true"]').removeAttr('checked');
})();
</script>

items_controller.rb:

def do_item
    @items = Item.all
    @item = Item.find(params[:id])
    respond_to do |format|
      if @item.done 
        if @item.update(done:false)
          format.html { redirect_to :index }
          format.js {}
        else
          format.html { redirect_to :index }
        end


      else

        if @item.update(done:true)
          format.html { redirect_to :index }
          format.js {}
        else
          format.html { redirect_to :index }
        end

      end

    end
  end

Да, используя jQuery каждый-единственный-friggin-time. Боже, когда я смотрю на это. Пожалуйста, пожалуйста, сообщите.

Теги:
checkbox

1 ответ

0
Лучший ответ

(Не знаю, пробовал ли вы это уже, возможно, это и некое взаимодействие, но :)

Когда я смотрю на документы для check_box_tag, у него есть параметр для состояния checked:

check_box_tag(name, value = "1", checked = false, options = {})

item.done ли он, когда вы используете item.done в качестве третьего параметра?

check_box_tag "item-#{item.id}", "1", item.done
  • 0
    Это действительно так! Как глупо с моей стороны скучать по этому, мне стыдно @ _ @

Ещё вопросы

Сообщество Overcoder
Наверх
Меню