HTMLRenderer

Problem:

Solution:

Example:

Using explicit naming:
<form> Name: <input name="name"> Quest: <input name="quest"> Favorite Color: <input name="favoriteColor"> <input type="submit" name="action" value="Save"> <input type="submit" name="action" value="Delete"> </form>
if(req["action"] == "Save")
  record.name = req["name"]
  record.quest = req["quest"]
  record.color = req["favoriteColor"]
else if(req["action"] == "Delete")
  delete(record)
end
Using callbacks:
<form> Name: <input name="1"> Quest: <input name="2"> Favorite Color: <input name="2"> <input type="submit" name="3"> <input type="submit" name="4"> </form>
{
  1 => proc{|v| record.name = v},
  2 => proc{|v| record.quest = v},
  3 => proc{|v| record.color = v},
  4 => proc{},
  5 => proc{delete(record)}
}
def edit_form(record, r)
   r.form do
      r.print "Name: "
      r.text_input(""){|v| record.name = v}
      
      r.print "Quest: "
      r.text_input(""){|v| record.quest = v}
	  
      r.print "Favorite Color: "
      r.text_input(""){|v| record.color = v}
	  
      r.submit_button("Save")
      r.submit_button("Delete"){delete(Record)}
   end
end

render do |r|
   all_records.each{|record| edit_form(record, r)}
end