2009-08-28 13 views

Respuesta

59

Se podría utilizar 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 crear la forma básica,

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

form_for prefiere, como primer arg, un objeto activerecord; permite realizar fácilmente una forma de crear o editar (para usarlo en un "nuevo" punto de vista se 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, por lo que usted no tiene que repetir el nombre del modelo en el propio formulario. que es la forma preferida para escribir una forma relacionada modelo.

form_tag sólo crea una etiqueta de formulario (y por supuesto en silencio preparar un campo oculto antiforgery, como form_for) ; se utiliza mejor para formularios que no sean modelos (de hecho, solo lo uso para formularios de búsqueda simples o similares).

De manera similar, 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 usted pueda disfrutar de las páginas de referencia FormHelper y PrototypeHelper.

EDITAR 2012-07-13

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

+0

El segundo enlace no funciona. – WowBow

+1

@WowBow tienes razón; después de todo, esta respuesta es bastante antigua, y Prototype ha sido eliminada de los raíles hace mucho tiempo. Editaré mi respuesta. – giorgian

+0

¿Qué significa que 'form_for'" prefiera "un objeto ActiveRecord? – shiggity

4

Estos deben 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, tendrá que definir esto explícitamente.

+0

Corto y preciso. [Hermosa expiación] –