What I'm trying to do:

Display a form in a table using Rails, using a more compact method
than simply spitting out the HTML for the entire form.  So if I've got
a model called Client, which has a field called "active", and I want a
checkbox displayed with the label "Active?", the scaffolding code
gives me something like this (apologies if this renders oddly):

        <tr>
                <td><label for="client_is_human">Human?</label></td>
                <td><%= check_box 'client', 'is_human', {}, 'yes', 'no' %></td>
        </tr>

This has a bit of duplication, and I'd like to be able to boil it down
to something like this:

        <%
        def wrap_form_helper(label, formHelperSymbol, object, method, 
*otherArgs)
                # do magic
        end
        %>
        
        <%= wrap_form_helper 'Human?',  :check_box, 'client', 'is_human', {},
'yes', 'no' -%>


How I've tried to do this:

        def wrap_form_helper(label, formHelperSymbol, object, method, 
*otherArgs)
                formHelper = method(formHelperSymbol)
                control = formHelper.call(object, method, otherArgs)
                # wrap control in some table tags and return it
        end

The above Method#call code works fine as long as I only pass the first
four arguments.  Any more than that and I get a message to the effect
that Array#stringify_keys is undefined.

I can, of course, do a big case statement on the arity of otherArgs
and pass otherArgs[0], otherArgs[1], etc... but that's horribly wrong.
 (It's still better than building a string for eval(), though,
considering that one of the arguments is a hash.)

Can't really STFW for this because I'm not sure what I'm looking for. 
Is there some way to expand an array and send its elements to call()?

Any help appreciated,
-Sam
_______________________________________________
PDXRuby mailing list
[email protected]
IRC: #pdx.rb on irc.freenode.net
http://lists.pdxruby.org/mailman/listinfo/pdxruby

Reply via email to