Работает ли form_tag с Simple_form?

У меня есть форма, использующая form_tag, и я не знаю, как использовать ее с гем simple_form. Вот так выглядит моя форма:

<%= 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 %>

Можно ли это сделать? Как изменить form_tag, чтобы правильно использовать simple_form? А как насчет использования его с fields_for? Новичку может понадобиться помощь.

Спасибо.


person LearningRoR    schedule 18.02.2012    source источник


Ответы (4)


simple_form — это оболочка вокруг form_for, а не form_tag. Вы можете использовать simple_form_for вместо form_for, но form_tag просто создает теги <form> с указанным содержимым, это не относится к простой форме.

person Ineu    schedule 18.02.2012

Вы можете использовать simple_form, даже если вы не создаете форму, привязанную к модели.

Возьмите эту форму входа в качестве примера:

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

Это сгенерирует следующие параметры:

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

В вашем контроллере вы можете ссылаться на поля формы, используя:

params[:signin][:email] ...
person barelyknown    schedule 27.09.2012
comment
Ознакомьтесь с ответом Мауро Локателли, чтобы избежать встроенных параметров. - person ngoue; 08.01.2016

Вы можете избежать использования

params[:signin][:email]

с использованием

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

so

params[:email]
person Mauro    schedule 30.01.2015

как сказал @barelyknown Вы можете использовать simple_form даже без модели Вы также можете использовать field_for или 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 %>
person qoyyim    schedule 13.01.2016