Я создаю приложение 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. Боже, когда я смотрю на это. Пожалуйста, пожалуйста, сообщите.
(Не знаю, пробовал ли вы это уже, возможно, это и некое взаимодействие, но :)
Когда я смотрю на документы для 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