form_tag - howto call with self.send?

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/


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

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.


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:

Good luck!

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


Thanks! That did do the trick :slight_smile: