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
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.
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 %> <div class="separator"> </div> <%= button_to 'Cancel', :action => 'index' %>
And partial _test.
<div class="form1"> <table width="30%" boader="8" cellspacing="2" cellpadding="2"> <tr> <td align="left"><h2><label for="enter_data" >Enter Data: </label></h2></td> <td align="left"><td><%= text_field_tag, 'Field1' %></td> </tr>
</div>
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.
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 }
2. 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
3. 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. 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
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]
Hi Robert,
I just want to say thank you, very very much. Your last piece of
advise did the trick perfectly
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.