Form_tag - howto call with self.send?


#1

I have the following code in a form helper Module:

def form_tag_helper(options = {})
url = url_for(:action => “#{@controller.action_name}”)
“#{self.send(:form_tag, url, options)}”
end

which I call from several views e.g.

<%= form_tag_helper %>
  <table>
    <%#= form_input :text_field, "login", :size => 30 %><br/>
    <%#= form_input :password_field, "password", :size => 30 %><br/
  </table>

  <div class="button-bar">
    <%#= button_helper 'login' %>
    <%#= link_helper 'login_signup', :action => 'signup' %>
    <%#= link_helper 'login_forgot_password', :action =>

‘forgot_password’ %>

The code – which I have modified from the SaltedHashLoginGenerator
(replace deprecated start_form_tag with form_tag) – seems to generate
an html form correctly. I am however conscious that form_tag (when
used in the manner above) should have a do…end block surrounding the
form elements and the above code does not respect this.

I would appreciate any views on this and suggestions on how I might
add a do…end block.

Thanks!


#2

In Ruby, you can pass a block (a chunk of code) to a method call, and
then run that code by calling yield in the method. This might be what
you need… A caveat: I’m pretty much a noob, so anything I say
might be wrong :slight_smile:

This page looks like it might be helpful:
http://tutorial.jcwcn.com/Web-Design/Ruby-on-Rails/Helpers/2007-08-25/3066.html

Good luck!

On Dec 18, 1:07 am, “removed_email_address@domain.invalid”


#3

On 18 Dec 2008, at 09:07, removed_email_address@domain.invalid wrote:

I have the following code in a form helper Module:

def form_tag_helper(options = {})
url = url_for(:action => “#{@controller.action_name}”)
“#{self.send(:form_tag, url, options)}”
end

I’d guess something along the line of
def form_tag_helper(options = {}, &block)
url = url_for(:action => “#{@controller.action_name}”)
form_tag( url, options, &block)
end

and then use form_tag_helper as you would form_tag, ie

<% form_tag_helper do %>

<% end >

should do the trick

Fred


#4

Thanks! That did do the trick :slight_smile: