Domanda

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

Nell'esempio sopra, che funziona, dovevo dire @ album.id nel form_tag ma nel campo di testo dovevo dire: album. Continuo a confondere questi nei miei punti di vista e non so mai davvero se usare un segno @ o un simbolo. Esiste una semplice regola che potrebbe chiarire cosa usare quando?

È stato utile?

Soluzione

Vado su una tangente qui per un momento, ma abbi pazienza.

In primo luogo, ti consiglio di utilizzare Instradamento RESTful in quanto ti dà accesso ad alcuni Rails metodi e operazioni migliori come essere in grado di fare:

form_for(@album) do |f|

e farlo capire dove vuoi andare in base allo stato #new_record? di quell'oggetto.

In secondo luogo, con il nuovo form_for in atto, sarai in grado di ASCIUGARE le tue viste facendo:

<%= f.text_field :title %>

anziché:

<%= text_field :album, :title %>

E infine la spiegazione del perché una variabile è definita con un segno @ prima di essa in Rails, nota anche come "variabili di istanza":

Quando definisci una variabile di istanza in Rails, è disponibile all'interno di quell'istanza per l'intera richiesta in cui l''istanza " " è la catena di metodi ActionController e ActionView che vengono chiamati per eseguire tutto il rendering e così via. La definizione come variabile di istanza lo renderà disponibile nel tuo controller, qualsiasi metodo tu chiami dopo averlo definito nel controller, i tuoi helper, le tue viste e i parziali resi da tuoi controller, aiutanti o viste.

Fondamentalmente, è disponibile per l'intera richiesta ma non è accessibile all'interno del modello.

Altre specifiche delle variabili sono variabili di classe ( @@ some_useful_thing = 1 ) e variabili globali ( $ some_other_useful_thing = 1 ) e costanti ( ALL_IN_UP_CASE = 1 ).

Altri suggerimenti

Il simbolo @ prima del nome di una variabile si riferisce a una variabile di istanza nella classe corrente. Il prefisso: (due punti) crea un simbolo. Nel tuo esempio, @ album.id sta inviando l'id della variabile di istanza @album a form_tag , consentendo form_tag leggere quell'oggetto dal database e popolare i campi del modulo con i dati appropriati di quell'oggetto. I simboli che passi nei metodi text_field sono ciò che form_tag usa per accedere a proprietà specifiche sull'oggetto che crea dal database. Quindi inserisce i valori di tali proprietà nei campi di testo che genera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top