Sinatra, formularze i uzupełnianie danych

(dzień) dobry wieczór

Od razu ostrzegam, że będzie niezła patologia kodu, a może tak się robi, nie wiem, ale warto poznać opinie doświadczonych kolegów.
Krótka historia: tworzę formularz, który będzie składał się z wielu pól (w sensie wierszowym a nie kolumnowym), czyli każdy nowy wiersz, to nowy rekord. Niestety podjąłem decyzję, że użyję sinatry i niestety nie mogę wykorzystać railsów i fantastycznego formtastica, więc robię to łopatologicznie, pytanie czy da się to napisać porządniej czy muszę za każdym razem sprawdzać aż 3 warunki, otóż mam pole formularza, które nazywa sie new_function[X][name], new_function[X][value_field], new_function[X][comment], gdzie X to kolejny numer porządkowy… wyszło mi coś takiego (w partialu):

[code]-unless params[:new_function].blank?
-value_name = params[:new_function][i.to_s].blank? ? ‘’ : params[:new_function][i.to_s][:name]
-value_comment = params[:new_function][i.to_s].blank? ? ‘’ : params[:new_function][i.to_s][:comment]

%tr
%td
%input{ :type => ‘text’, :id => “new_function_#{i}name", :name => “new_function[#{i}][name]”, :value=> value_name }
%td
- checkbox_options = { :type => ‘checkbox’, :id => "new_function_value
#{i}field", :name => “new_function[#{i}][value_field]”, :value => 1 }
#niestety nie wiem czemu, ale jak do checkboxa dodam pusty atrybut checked=’’, to w FF checkbox jest zaznaczony, stąd taki workarond
- checkbox_options[:checked] = ‘checked’ if !params[:new_function].blank? and !params[:new_function][i.to_s].blank? and !params[:new_function][i.to_s][:value_field].blank?
%input{checkbox_options}
%td
%input{ :type => ‘text’, :id => "new_function
#{i}_comment”, :name => “new_function[#{i}][comment]”, :size => 50, :maxlength => 250, :value=> value_comment }[/code]
głównie chodzi o warunek:

- checkbox_options[:checked] = 'checked' if !params[:new_function].blank? and !params[:new_function][i.to_s].blank? and !params[:new_function][i.to_s][:value_field].blank?

Nie da się tego jakoś po ludzku w prostszy sposób sprawdzić? Najpierw muszę sprawdzić czy form jest wyświetlany na świeżo (czy jest params[:new_function].blank?), potem - po wysłaniu forma, czy checkbox jest w ogóle dostępny (!params[:new_function][i.to_s].blank?) a jeśli jest, to czy jest kliknięty (!params[:new_function][i.to_s][:value_field].blank?) - aż mi wstyd, że takie coś napisałem, stąd moj post na patologii kodu ;), pomożecie?

Moze popatrz jak inni do tego podeszli:

np. tutaj:

Lub tutaj:

Możesz oczywiście też skorzystać z tych bibliotek :wink: