Pregunta

  <% form_tag(:action=>'update', :id=>@album.id) do %>

  Title: <%= text_field(:album, :title)  %><br>
  Artist: <%= text_field(:album, :artist)  %><br>
  Genre: <%= text_field(:album, :genre)  %><br>
  Release Date: <%= datetime_select(:album, :release_date, :start_year=>1960) %><br>

  <%= submit_tag("Update") %>

  <% end %>

En el ejemplo anterior, que funciona, tuve que decir @ album.id en la etiqueta de formulario, pero en el campo de texto tenía que decir: álbum. Sigo confundiendo estos en mis puntos de vista y nunca sé si usar un signo @ o un símbolo. ¿Existe una regla simple que podría dejar en claro qué usar cuándo?

¿Fue útil?

Solución

Voy a salir por una tangente aquí por un momento, pero tengan paciencia conmigo.

En primer lugar, le recomiendo que use Enrutamiento RESTful ya que esto le da acceso a algunos de Rails mejores métodos y operaciones, como poder hacer:

form_for(@album) do |f|

y hacer que funcione a dónde quieres ir en función del estado #new_record? de ese objeto.

En segundo lugar, con el nuevo form_for en su lugar, podrá SECAR sus vistas haciendo:

<%= f.text_field :title %>

en lugar de:

<%= text_field :album, :title %>

Y finalmente, la explicación de por qué una variable se define con un signo @ antes en Rails, también conocida como "variables de instancia":

Cuando define una variable de instancia en Rails, está disponible dentro de esa instancia para toda la solicitud donde la " instancia " es la cadena de métodos ActionController y ActionView a los que se llama para hacer todo el renderizado, etc. Definirlo como una variable de instancia lo hará disponible en su controlador, cualquier método que llame después de definirlo en el controlador, sus ayudantes, sus vistas y los parciales representados por sus controladores, ayudantes o vistas.

Básicamente, está disponible para toda la solicitud, pero no es accesible dentro de su modelo.

Otras especificaciones de variables son variables de clase ( @@ some_useful_thing = 1 ) y variables globales ( $ some_other_useful_thing = 1 ) y constantes ( ALL_IN_UP_CASE = 1 ).

Otros consejos

El símbolo @ antes del nombre de una variable se refiere a una variable de instancia en la clase actual. El prefijo: (dos puntos) crea un símbolo. En su ejemplo, @ album.id está enviando la identificación de la variable de instancia @album a form_tag , permitiendo form_tag para leer ese objeto de la base de datos y llenar los campos del formulario con los datos apropiados de ese objeto. Los símbolos que pasa en los métodos text_field son lo que form_tag usa para acceder a propiedades específicas en el objeto que crea desde la base de datos. Luego coloca los valores de esas propiedades en los campos de texto que genera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top