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