Difference between form_for and form_tag?

前端 未结 3 756
野的像风
野的像风 2020-12-17 18:05

I used this gem in my application, but I\'m not sure the difference between the different implementation options for the gem:

  • form_for
  • form_tag with b
相关标签:
3条回答
  • 2020-12-17 18:56

    As far as I know there is only one simple difference. form_tag without a block will only generate a html element for you. When you use form with a a block it will also create the form closing tag .

    In example:

    <% form_tag("/comments") %>
    

    will result in

    <form action="/comments">
    

    Where

    <%= form_tag("/comments") do %>
      <%= submit_tag %>
    <% end %>
    

    will generate

    <form action="/comments">
      <input type="sumbit" />
    </form>
    
    0 讨论(0)
  • 2020-12-17 19:01

    The differences are subtle, but important. form_for is a more advanced tool that yields an object you use to generate your form elements:

    <% form_for(@foo) do |form| %>
      <%= form.text_field(:bar) %>
    <% end %>
    

    The form_tag method is much more primitive and just emits a tag. If you want to put things inside of the <form> tag that's emitted, you put things inside the block:

    <% form_tag do %>
      <%= text_field_tag(:bar, 'bar_value') %>
    <% end %>
    

    Note that the form_for method handles grabbing values from your model, and will at least try to route the form to the appropriate action. With form_tag you are responsible for everything as it makes no assumptions about what you're doing.

    0 讨论(0)
  • 2020-12-17 19:03

    One uses model binding and the other doesn't

    0 讨论(0)
提交回复
热议问题