Pergunta

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

No exemplo acima, o que funciona, eu tinha a dizer @ album.id na form_tag mas no text_field eu tinha a dizer: álbum. Eu continuo confundir estes em meus pontos de vista e nunca realmente saber se a utilização de um sinal @ ou um símbolo. Existe uma regra simples que poderia torná-lo claro o que para usar quando?

Foi útil?

Solução

Vou sair pela tangente aqui por um momento, mas urso comigo.

Em primeiro lugar, eu recomendo que você use RESTful roteamento pois isso lhe dá acesso a algumas das Rails melhores métodos e operações tais como ser capaz de fazer:

form_for(@album) do |f|

e tê-lo trabalhar para fora onde você quer ir com base no estado #new_record? desse objeto.

Em segundo lugar, com o novo form_for no lugar, você vai ser capaz de secar seus pontos de vista fazendo:

<%= f.text_field :title %>

em vez de:

<%= text_field :album, :title %>

E, finalmente, a explicação de por que uma variável é definida com um símbolo @ antes que em Rails, também conhecido como "variáveis ??de instância":

Quando você define uma variável de instância em Rails está disponível dentro dessa instância para o pedido na totalidade onde o "exemplo" é o ActionController e ActionView cadeia de métodos que são chamados a fazer todo o processamento e assim por diante para você. Definindo-a como uma variável de instância irá torná-lo disponível em seu controlador, qualquer método que você chamar após defini-la no controlador, seus ajudantes, seus pontos de vista e as parciais prestados a partir do seu controladores, ajudantes ou pontos de vista.

Basicamente, é em torno de todo o pedido, mas não é acessível dentro do seu modelo.

Outras especificações de variáveis ??são variáveis ??de classe (@@some_useful_thing = 1) e variáveis ??globais ($some_other_useful_thing = 1) e constantes (ALL_IN_UP_CASE = 1).

Outras dicas

O símbolo @ antes de um nome de variável refere-se a uma variável de instância na classe atual. A: prefixo (cólon) cria um símbolo. No seu exemplo, @album.id está enviando o ID da variável de instância @album para form_tag, permitindo form_tag para ler no objeto do banco de dados e preencher os campos do formulário com os dados apropriados a partir desse objeto. Os símbolos que passam nos métodos text_field são o que form_tag usos para propriedades de acesso específicas sobre o objeto que cria a partir do banco de dados. Em seguida, ele coloca os valores dessas propriedades nos campos de texto que gera.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top