我有一个使用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
一起使用时怎么办?新手可以使用一些帮助。
谢谢。
答案 0 :(得分:136)
即使您没有创建与模型相关联的表单,也可以使用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] ...
答案 1 :(得分:16)
simple_form是form_for
的包装,而不是form_tag
。您可以使用simple_form_for
代替form_for
,但form_tag
只创建包含指定内容的<form>
代码,与简单形式无关。
答案 2 :(得分:6)
您可以避免使用
params[:signin][:email]
使用
<%= f.input :email, input_html: { name: "email" } %>
所以
params[:email]
答案 3 :(得分:1)
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 %>