Когда использовать @ в Rails View, а когда использовать символ? - PullRequest
5 голосов
/ 08 мая 2009
  <% 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 %>

В приведенном выше примере, который работает, я должен был сказать @ album.id в form_tag, но в текстовом поле мне пришлось сказать: album Я постоянно путаю их в своих взглядах и никогда не знаю, использовать ли знак @ или символ. Есть ли простое правило, которое может прояснить, что использовать, когда?

Ответы [ 2 ]

14 голосов
/ 08 мая 2009

Я собираюсь уйти здесь на некоторое время, но потерпите меня.

Во-первых, я рекомендую вам использовать RESTful маршрутизацию , поскольку это дает вам доступ к некоторым лучшим методам и операциям Rails, таким как возможность:

form_for(@album) do |f|

и заставить его работать там, где вы хотите, основываясь на состоянии #new_record? этого объекта.

Во-вторых, с новым form_for вы сможете высушить ваши взгляды, выполнив:

<%= f.text_field :title %>

вместо:

<%= text_field :album, :title %>

И, наконец, объяснение, почему переменная определяется со знаком @ перед ней в Rails, также известной как «переменные экземпляра»:

Когда вы определяете переменную экземпляра в Rails, она доступна внутри этого экземпляра для всего запроса, где «экземпляр» - это цепочка методов ActionController и ActionView, которые вызываются для выполнения всего рендеринга и так далее для вы. Определение его в качестве переменной экземпляра сделает его доступным в вашем контроллере, любом методе, который вы вызываете после определения его в контроллере, ваших помощниках, ваших представлениях и частичках, представленных вашими контроллерами, помощниками или представлениями.

По сути, он существует для всего запроса, но не доступен внутри вашей модели.

Другие спецификации переменных - это переменные класса (@@some_useful_thing = 1) и глобальные переменные ($some_other_useful_thing = 1) и константы (ALL_IN_UP_CASE = 1).

6 голосов
/ 08 мая 2009

Символ @ перед именем переменной относится к переменной экземпляра в текущем классе. Префикс: (двоеточие) создает символ. В вашем примере @album.id отправляет идентификатор переменной экземпляра @album в form_tag, что позволяет form_tag читать этот объект из базы данных и заполнять поля формы соответствующими данными из этого объекта. Символы, которые вы передаете в методах text_field, - это то, что form_tag использует для доступа к определенным свойствам объекта, который он создает из базы данных. Затем он помещает значения этих свойств в создаваемые текстовые поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...