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

W powyższym przykładzie, który działa, musiałem powiedzieć @ album.id w form_tag, ale w polu tekstowym musiałem powiedzieć: album. Mylę je w moich poglądach i nigdy nie wiem, czy użyć znaku @ lub symbolu. Czy istnieje prosta zasada, która może wyjaśnić, kiedy należy użyć?Kiedy używać @ w widoku szyn i kiedy użyć symbolu?

Odpowiedz

14

Idę na chwilę na styczną tutaj, ale wytrzymajcie ze mną.

Po pierwsze, zaleca się użycie RESTful routing ponieważ daje dostęp do niektórych Rails lepsze metody i operacje takie jak są w stanie zrobić:

form_for(@album) do |f| 

io to działa, gdzie chcesz iść w oparciu na stanie #new_record? tego obiektu.

Po drugie, z nowym form_for w miejscu, będziesz mógł wyschnąć swoje poglądy, wykonując:

<%= f.text_field :title %> 

zamiast:

<%= text_field :album, :title %> 

i wreszcie wyjaśnienie, dlaczego zmienna jest definiowana za pomocą znaku @ przed nim w Railsach, nazywana również "zmiennymi instancji":

Po zdefiniowaniu zmiennej instancji w Railsach jest ona dostępna wewnątrz tego instancja dla całego żądania, gdzie "instancja" to łańcuch metod, które są wywoływane, aby wykonać renderowanie i tak dalej dla ciebie. Zdefiniowanie go jako zmiennej instancji spowoduje, że będzie ona dostępna w kontrolerze, każdej metodzie, którą wywołasz po zdefiniowaniu jej w kontrolerze, twoich pomocnikach, twoich widokach i cząstkach wyrenderowanych z kontrolerów, pomocników lub widoków.

Zasadniczo dotyczy to całego żądania, ale nie jest dostępny w modelu.

Inne specyfikacje zmiennych to zmienne klasy (@@some_useful_thing = 1) i zmienne globalne ($some_other_useful_thing = 1) oraz stałe (ALL_IN_UP_CASE = 1).

+0

Dzięki. Muszę zajrzeć do REST. Pracując nad niektórymi samouczkami dotyczącymi Rails 1.1.6 i jeszcze się do tego nie dostałem. Tak więc, w form_for, text_field (: album,: title) nie jest konieczne, ponieważ: nazwa albumu jest już znana, ponieważ f.text_field jest częścią formularza, do którego odwołujesz się za pomocą do | f |. Myślę, że to rozumiem. Dzięki. –

6

Symbol @ przed nazwą zmiennej odnosi się do zmiennej instancji w bieżącej klasie. Prefiks: (dwukropek) tworzy symbol. W twoim przykładzie, @album.id wysyła ID zmiennej @album do form_tag, umożliwiając form_tag odczytanie w tym obiekcie z bazy danych i wypełnienie pól formularza odpowiednimi danymi z tego obiektu. Symbole przekazywane w metodach text_field służą do uzyskiwania dostępu do określonych właściwości obiektu, który tworzy z bazy danych. Następnie umieszcza wartości tych właściwości w polach tekstowych, które generuje.

+0

Tak więc text_field nie wie o albumie tylko dlatego, że jest zawarty w tagu form_tag, który już ma do niego odniesienie. Jak mówi Radar, form_for byłby rozwiązaniem tego powtórzenia. Myślę, że teraz rozumiem to. Dziękuję za wyjaśnienie. –

Powiązane problemy