2012-02-18 33 views
36

Tôi có một mẫu đang sử dụng form_tag và không chắc chắn cách sử dụng nó với simple_form gem. Đây là hình thức của tôi:Form_tag có hoạt động với Simple_form không?

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

Có thể làm được không? form_tag thay đổi để sử dụng simple_form một cách chính xác như thế nào? Điều gì về khi sử dụng nó với fields_for? Một Newbie có thể sử dụng một số trợ giúp.

Cảm ơn bạn.

Trả lời

16

simple_form là trình bao bọc xung quanh form_for, không phải form_tag. Bạn có thể sử dụng simple_form_for thay vì form_for, nhưng form_tag chỉ cần tạo <form> thẻ có nội dung được chỉ định, nó không liên quan đến biểu mẫu đơn giản.

131

Bạn có thể sử dụng simple_form ngay cả khi bạn không tạo biểu mẫu được gắn với mô hình.

Hãy hình thức đăng nhập này là một ví dụ:

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

Điều đó sẽ tạo ra params như sau:

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

Trong điều khiển của bạn, bạn có thể tham khảo các trường mẫu sử dụng:

params[:signin][:email] ... 
+0

Thanks a lot. Đó chính xác là những gì tôi cần. – gotqn

+0

Cảm ơn bạn. Giúp tôi rất nhiều. – zires

+0

Cảm ơn bạn rất nhiều! Tôi đã có vấn đề này 2 giờ và bạn đã cứu tôi. Cảm ơn! – Blaze

5

Bạn có thể tránh sử dụng

params[:signin][:email] 

sử dụng

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

nên

params[:email] 
+0

Đây là những gì tôi cần! – ngoue

1

như @barelyknown nói Bạn có thể sử dụng simple_form thậm chí không có mô hình Bạn cũng có thể sử dụng field_for hoặc 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 %> 
Các vấn đề liên quan