Работает ли form_tag с Simple_form? - PullRequest
39 голосов
/ 18 февраля 2012

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

<%= 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?Новичку может помочь помощь.

Спасибо.

Ответы [ 4 ]

136 голосов
/ 27 сентября 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"=>"test@test.com",
    "password"=>"[FILTERED]"},
    "commit"=>"Sign In"
   }
 }

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

params[:signin][:email] ...
16 голосов
/ 18 февраля 2012

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

6 голосов
/ 30 января 2015

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

params[:signin][:email]

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

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

так

params[:email]
1 голос
/ 13 января 2016

как сказал @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 %>
...