I am working on a site that does web surveys. I have created a helper
method to create a likert scale table (e.g., 5 columns + row title,
strongly dislike <-> strongly like). This method accepts an array of
hashes and then uses the built in Rails helper form.radio_button to
unwrap the hash and build the table. The function is below:
# procedurally goes into an array of hashes and generates a likert
table
def likert_table(items = [], f=f)
result = "" # collector string
items.each {|item| item.each {|attribute,text| result = result +
likert_row(attribute,text,f)}}
return "<table class=''likert_table''>
<tr class=''likert_table_header_row''>
<th></th>
<th>Strongly Dislike</th>
<th>Dislike</th>
<th>Neutral</th>
<th>Like</th>
<th>Strongly Like</th>
</tr>
#{result}
</table>"
end
# create a row in a table with the 5 selectable radio buttons
def likert_row(attribute, text, f=f)
"<tr>
<td align=''right''
class=''likert_row_label''>#{f.label attribute,
text}</td>
<td align=''center''
class=''likert_row''>#{f.radio_button attribute,
1}</td>
<td align=''center''
class=''likert_row''>#{f.radio_button attribute,
2}</td>
<td align=''center''
class=''likert_row''>#{f.radio_button attribute,
3}</td>
<td align=''center''
class=''likert_row''>#{f.radio_button attribute,
4}</td>
<td align=''center''
class=''likert_row''>#{f.radio_button attribute,
5}</td>
</tr>"
end
However, I had a few questions about refactoring.
First, do I need to pass "f" in both of those functions? I use it in
the f.radio_button helper (as this method would be called inside a
form_for) but it seems clunky to have to add "f" to the arguments
every
time.
Second, is using a string variable to collect the output of the
iterations and then returning that string the best way to construct an
iterative helper?
Third, is there a simpler way to iterate through this than an array of
hashes? I can build a likert table like so:
<%= likert_table([:rates_fighting => "Fighting",
:rates_platform => "Platform",
:rates_shooter => "Shooter",
:rates_action_adventure => "Action
Adventure",
:rates_system_sim => "System Simulator",
:rates_life_sim => "Life Simulation",
:rates_rpg => "Role Playing Game",
:rates_mmorpg => "Online Role Playing Game",
:rates_strategy => "Strategy",
:rates_vehicle_sim => "Vehicle Simulation",
:rates_music => "Music",
:rates_puzzle => "Puzzle",
:rates_sports => "Sports",
:rates_casual => "Casual"],
f)%>
...but it feels un-Railslike, especially with that dangling "f".
Later
I will be pulling these values from a database and using a collection
instance variable. As a beginner ruby programmer I have hit my ceiling
on this one. Any thoughts? Thanks in advance.
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---