Когда использовать @ в Rails View, а когда использовать символ?

StackOverflow https://stackoverflow.com/questions/838109

Вопрос

  <% 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. Я постоянно путаю их в своих взглядах и никогда не знаю, использовать ли знак @ или символ. Есть ли простое правило, которое может дать понять, что и когда использовать?

Это было полезно?

Решение

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

Во-первых, я рекомендую вам использовать 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 ).

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top