Akurat poprawiam ten kod więc wrzucam moje poprawki też tutaj:
Na początek można pozbyć się zmiennej lokalnej content i podwójnego wołania unless fc.faq_items.blank?
Programista który to pisał nie wiedział chyba, że content_tag może przyjmować blok (przydaje się przy bardziej złożonej strukturze, np. tworzymy taga i w nim zagnieżdżamy kilka innych tagów).
Poza tym relacja has_many domyślnie zwraca pustą tablicę a nie nil więc używanie blank? działa ale jest zbyteczne, lepiej skorzystać z empty?
Ręczne składanie unikalnych id obiektów (które są wykorzystywane w kodzie js) zastępujemy helperem dom_id
Kod działa zasadniczo tak samo, tylko jest trochę bardziej przejrzysty:
Pozbywamy się tych wszystkich unikalnych id, elementów wyszukujemy przy pomocy klas CSS oraz ich relatywnego położenia.
Kod inline js zastępujemy kodem “unobtrusive” a Prototype zastępujemy jQuery:
[code=ruby]<% content_for(:head) do -%>
<%= javascript_include_tag(“faqs”) -%>
<% end -%>
To pokazuje doskonale, dlaczego ERb sucks W hamlu:
- unless fc.faqs.empty?
%p.category_link= link_to "Expand", "#nogo"
%h3= fc.title
.faq_category{:style => "display: none"}
- fc.faqs.each do |fi|
%p.faq_link= link_to fi.question, "#nogo"
.faq_answer{:style => "display: none"}= fi.answer
.clear
Zrobiłem dwie drobne zmiany - styl przyczepiłem do tagu “p”.
EDIT
No i jeszcze uwaga odnośnie nazewnictwa (u mnie to już tradycja - bezsensowne jest przekazywanie zmiennej lokalnej “fc” (Barcelona?) do tego “parszala”.
Zdecydowanie lepiej zrobić = render :partial => "category_item", :object => fc
i w “parszalu” odwoływać się do “category_item”.
Tym bardziej jest to mylące, kiedy do “_faq_item” przekazywanay jest obiekt “fc” (FaqCategory) (dlatego właśnie zmieniłem tę nazwę “parszala”).