Frage

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

In dem obigen Beispiel, das funktioniert, hatte ich in der form_tag @ album.id zu sagen, aber in den text_field ich zu sagen hatte: Album. Ich halte verwirrend diese in meinen Ansichten und nie wirklich wissen, ob ein @ Zeichen oder Symbol zu verwenden. Gibt es eine einfache Regel, die es machen könnte klar, was wann zu benutzen?

War es hilfreich?

Lösung

ich auf einer Tangente hier für einen Moment gehen werde, aber mit mir tragen.

Als erstes empfehle ich, dass Sie verwenden RESTful Routing , da dies gibt Ihnen einige Rails zugreifen bessere Methoden und Operationen wie zu tun in der Lage:

form_for(@album) do |f|

ist und es funktioniert, wo Sie auf dem #new_record? Zustand dieses Objekts basierend gehen wollen.

Zum anderen mit dem neuen form_for an Ort und Stelle, können Sie Ihre Ansichten vertrocknen, indem Sie:

<%= f.text_field :title %>

statt:

<%= text_field :album, :title %>

Und schließlich die Erklärung, warum eine Variable mit einem @ -Zeichen, bevor es in Rails definiert ist, auch als „Instanzvariablen“ bekannt ist:

Wenn Sie ein Instanz-Variable in Rails definieren, ist es in diesem Fall für die gesamte Anfrage zur Verfügung, wo die „Instanz“ die ActionController und ActionView ist Kette von Methoden, die für Sie all Rendering zu tun und so weiter aufgerufen. es als Instanzvariable definieren wird es in Ihrem Controller, jede Methode, die Sie nach dem Aufruf zur Verfügung stellen in der Steuerung, Ihre Helfer, Ihre Ansichten und die partials definieren, entweder von Ihrem Controller, Helfer oder Ansichten gerendert.

Im Grunde ist es um für die gesamte Anforderung ist aber in Ihrem Modell nicht zugänglich.

Andere variable Spezifikationen sind Klassenvariablen (@@some_useful_thing = 1) und globale Variablen ($some_other_useful_thing = 1) und Konstanten (ALL_IN_UP_CASE = 1).

Andere Tipps

Der @ -Symbol vor einem Variablennamen bezieht sich in der aktuellen Klasse zu einer Instanz variabel. Der: (Doppelpunkt) Präfix erstellt ein Symbol. In Ihrem Beispiel sendet @album.id die ID des @album Instanzvariable form_tag, form_tag ermöglichte in diesem Objekt aus der Datenbank zu lesen und die Formularfelder mit den entsprechenden Daten aus diesem Objekt zu füllen. Die Symbole, die Sie in den text_field Methoden übergeben sind, was form_tag spezifische Eigenschaften für das Objekt zuzugreifen, verwendet es aus der Datenbank erstellt. Es setzt dann die Werte dieser Eigenschaften in die Textfelder erzeugt es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top