Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does form_tag work with Simple_form?

I have a form that is using form_tag and not sure how to use it with the simple_form gem. This is how my form looks:

<%= form_tag create_multiple_prices_path, :method => :post do %>

  <% @prices.each_with_index do |price, index| %>
    <%= fields_for "prices[#{index}]", price do |up| %>
      <%= render "fields", :f => up %>
    <% end %>
  <% end %>

  <%= submit_tag "Done" %>
<% end %>

Can it be done? How would a form_tag change to use simple_form correctly? What about when using it with fields_for? A Newbie could use some help.

Thank you.

like image 864
LearningRoR Avatar asked Feb 18 '12 15:02

LearningRoR


4 Answers

You can use simple_form even if you aren't creating a form that's tied to a model.

Take this signin form as an example:

<%= simple_form_for :signin, { url: signin_path } do |f| %>
  <%= f.input :email %>
  <%= f.input :password %>
  <%= f.button :submit, "Sign In" %>
<% end %>

That will generate params like the following:

{
  ...
  "signin" => {
    "email"=>"[email protected]",
    "password"=>"[FILTERED]"},
    "commit"=>"Sign In"
   }
 }

In your controller you can reference the form fields using:

params[:signin][:email] ...
like image 192
barelyknown Avatar answered Nov 20 '22 07:11

barelyknown


simple_form is a wrapper around form_for, not form_tag. You can use simple_form_for instead of form_for, but form_tag just creates <form> tags with specified content, it is not relevant to simple form.

like image 17
Ineu Avatar answered Nov 20 '22 07:11

Ineu


You can avoid use of

params[:signin][:email]

using

<%= f.input :email, input_html: { name: "email" } %>

so

params[:email]
like image 7
Mauro Avatar answered Nov 20 '22 06:11

Mauro


like @barelyknown said You can use simple_form even without model You can also use field_for or simple_field_for

<%= simple_form_for :transaction_limits, {url: create_multiple_prices_path, method: :post} do |f| %>
  <% @prices.each_with_index do |price, index| %>
    <%= f.fields_for "prices[#{index}]", price do |up| %>
      <%= render "fields", :f => up %>
    <% end %>
  <% end %>

  <%= f.submit "button" %>
<% end %>
like image 1
qoyyim Avatar answered Nov 20 '22 05:11

qoyyim