with rails form_with form_tag form ruby-on-rails

ruby-on-rails - rails - form_with textarea



Diferencia entre form_for, form_tag? (3)

¿Cuál es la diferencia entre form_for y form_tag? ¿Hay algo diferente para form_remote_for y form_remote_tag?


Deberías usar form_for para un modelo específico,

<% form_for @person do |f| %> # you can use f here First name: <%= f.text_field :first_name %> Last name : <%= f.text_field :last_name %> <% end %>

Form_tag crea una forma básica

<%= form_tag ''/person'' do -%> <%= text_field_tag "person", "first_name" %> <% end -%>


Estos deberían ser similares:

<% form_for @person do |f| %> <%= f.text_field :name %> <% end %>

y:

<%= form_tag ''/person'' do %> <%= text_field_tag "person[name]" %> <% end %>

Si desea enviar los mismos parámetros al controlador, deberá definir esto de manera explícita.


form_for prefiere, como su primer arg, un objeto activerecord; permite crear fácilmente un formulario de creación o edición (para usarlo en una vista "nueva" debe crear una instancia vacía en el controlador, como:

def new @foo = Foo.new end

También pasa una variable de formulario al bloque, para que no tenga que repetir el nombre del modelo dentro del formulario. es la forma preferida de escribir un formulario relacionado con el modelo.

form_tag solo crea una etiqueta de formulario (y por supuesto prepara silenciosamente un campo oculto antiforgery, como form_for ); es mejor usarlo para formularios que no sean modelos (de hecho, solo lo uso para formularios de búsqueda simples o similares).

Del mismo modo, form_remote_for y form_remote_tag son adecuados para formularios relacionados con modelos y no para formularios relacionados con modelos, respectivamente, pero, en lugar de finalizar en un método http estándar (GET, POST ...), llaman a un método ajax.

Todo esto y mucho más están disponibles para que los disfrute en FormHelper y PrototypeHelper páginas de referencia.

EDITAR 2012-07-13

Prototype ha sido eliminado de los rails hace mucho tiempo, y las formas remotas han cambiado por completo. Consulte el primer enlace, con respecto a la opción :remote de form_for y form_tag .