Question

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

Dans l'exemple ci-dessus, qui fonctionne, je devais dire @ album.id dans le masque de formulaire mais dans le champ text_field, je devais dire: album. Je continue à les confondre dans mes vues et je ne sais jamais vraiment s'il faut utiliser un signe @ ou un symbole. Existe-t-il une règle simple permettant de savoir clairement quoi utiliser quand?

Était-ce utile?

La solution

Je vais partir sur une tangente ici pour un moment, mais supporte-moi.

Tout d'abord, je vous recommande d'utiliser le routage RESTful , qui vous donne accès à certains des Rails. meilleures méthodes et opérations telles que pouvoir faire:

form_for(@album) do |f|

et de déterminer où vous voulez aller en fonction de l'état #new_record? de cet objet.

Deuxièmement, avec le nouveau formulaire_pour en place, vous pourrez assécher vos vues de la manière suivante:

<%= f.text_field :title %>

au lieu de:

<%= text_field :album, :title %>

Et enfin, l'explication de la raison pour laquelle une variable est définie avec le signe @ avant celle-ci dans Rails, également appelée "variables d'instance":

Lorsque vous définissez une variable d'instance dans Rails, elle est disponible dans cette instance pour l'intégralité de la requête, où l'instance "instance" est définie. est la chaîne de méthodes ActionController et ActionView qui sont appelées pour effectuer tout le rendu, etc. pour vous. La définir en tant que variable d'instance le rendra disponible dans votre contrôleur, toute méthode que vous appelez après l'avoir définie dans le contrôleur, vos aides, vos vues et les partiels générés à partir de vos contrôleurs, aides ou vues.

En gros, cela concerne la totalité de la demande mais n'est pas accessible dans votre modèle.

Les autres spécifications de variable sont les variables de classe ( @@ some_useful_thing = 1 ) et les variables globales ( $ some_other_useful_thing = 1 ) et les constantes ( ALL_IN_UP_CASE = 1 ).

Autres conseils

Le symbole @ avant un nom de variable fait référence à une variable d'instance dans la classe actuelle. Le préfixe: (deux points) crée un symbole. Dans votre exemple, @ album.id envoie l'ID de la variable d'instance @album à étiquette_formulaire , ce qui permet à étiquette_formulaire pour lire cet objet à partir de la base de données et remplir les champs de formulaire avec les données appropriées de cet objet. Les symboles que vous transmettez dans les méthodes text_field correspondent à ce que form_tag utilise pour accéder à des propriétés spécifiques sur l'objet qu'il crée à partir de la base de données. Il place ensuite les valeurs de ces propriétés dans les champs de texte qu'il génère.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top