Howto accept input from a form to a variable (not a database field)

How do I use a form to capture data for a variable that is no a
database field? In the case, I would like to search my database based
on the data that the user inputs via a form. Any assistance will be
greatly appreciated.

Regards,

Paul Thompson

First use form_tag rather than form_for (which is designed for model
based forms). The instead of something like f.text_field you would use
text_field_tag.

Then just pull the parameter out of params by name
params[:name_of_field] and put that into your variable.

On Aug 7, 3:13 pm, “Paul Jonathan T.” [email protected]

2008/8/8 Robert W. [email protected]:

First use form_tag rather than form_for (which is designed for model
based forms). The instead of something like f.text_field you would use
text_field_tag.

Then just pull the parameter out of params by name
params[:name_of_field] and put that into your variable.

Hi Robert,

thanks for the guidance, I am pretty green when it comes to rails so
one more question if you don’t mind? How do I kick this off? I have
this in my views folder.

<% form_tag :action => ‘update’, :id => @supplier do %>
<%= render :partial => ‘test’ %>
<%= submit_tag ‘Save’ %>
<% end %>

 
<%= button_to 'Cancel', :action => 'index' %>

And partial _test.

Obviously “<% form_tag :action => ‘update’, :id => @supplier do %>”
needs to be changed as there is now no supplier database. Can you
please set me straight?

Thanks,

Paul Thompson.

Enter Data:

<%= text_field_tag, 'Field1' %>

Ok. To expand on that a bit say you wanted to add a search field to
find suppliers.

  1. Add a collection action to your suppliers resource:

map.resources :suppliers, :collection => { :search => :get }

  1. Add the action to your suppliers_controller.rb:

def search
@suppliers = Supplier.find_by_name(params[:search])

respond_to … # the standard respond_to stuff here
end

  1. In your view use your search action route and a text_field_tag.

<% form_tag(search_suppliers_path) do %>
<%= text_field_tag :search
<%= submit_tag ‘Search’ %>
<% end %>

This is untested code off the top of my head, but check the Rails API
docs for form_tag and test_field_tag for more details on usage. Also
this is only one of many solutions. It all depends on your needs, but
this is the simplest example I can think of.

Also if you don’t subscribe to the Railscasts podcast. Check it out.
It has very good information to help get you started.

On Aug 7, 3:53 pm, “Paul Jonathan T.” [email protected]

Ahh. I see. The answer is still lurking in those previous responses.

You can still use form_field_tag inside of a form_for block.

So if you had something like:

<% form_for @suppliers do |form| %>
<%= form.text_field :name %>

<%= text_field_tag :extra %> #using a text_field_tag here because
it’s not tied to a model
<%= hidden_field_tag :hidden_extra, “Some hidden value” %> #or even
use a hidden_field_tag

<% end %>

Then in the controller access :extra by params[:extra] or
params[:hidden_extra]

On Aug 7, 6:20 pm, “Paul Jonathan T.” [email protected]

2008/8/8 Robert W. [email protected]:

def search
<% end %>

This is untested code off the top of my head, but check the Rails API
docs for form_tag and test_field_tag for more details on usage. Also
this is only one of many solutions. It all depends on your needs, but
this is the simplest example I can think of.

Also if you don’t subscribe to the Railscasts podcast. Check it out.
It has very good information to help get you started. http://railscasts.com/

Hi Robert,

I would really, really love to be able to benefit from Railscasts
podcast. However I am totally deaf and so I am unable to use what must
be a marvellous resource.

I think that I have not explained properly what I want to do as the
answer that you have provided seem very complex for what is a small
thing. At the end of the day, all I want to do is accept a name from
an input field in a view. then store it in a session variable so that
I can use it to access various tables in a database when the user
decides what reports they want. Sorry if I have led you up the garden
path.

Thanks,

Paul Thompson

Hi Robert,

I just want to say thank you, very very much. Your last piece of
advise did the trick perfectly :slight_smile:

Sorry that it has taken me so long to get back to you but I was side
tracked by other issues. I am just one guy looking after IT for
company of fifty employees and I do everything. So sometimes I have to
put one thing aside and concentrate on another.

Thank you once again for the trouble that you have taken. It
appreciated.

Regards,

Paul Thompson.

2008/8/9 Robert W. [email protected]: