Ruby - Разница между: variable и @variable

Как новичок в Ruby on Rails, я понимаю, что ссылки «@» и «:» имеют разные значения. Я видел этот пост в SO, в котором описаны некоторые различия.

  1. @ указывает переменную экземпляра (например, @my_selection)
  2. : указывает псевдоним (например, : my_selection)

Я столкнулся с ситуацией, когда у меня была стандартная страница MVC, похожая на все другие формы / страницы в моем веб-приложении.

фрагмент html.erb

<%= form_for @my_selection do |f| %>

фрагмент route.rb

resources :my_selections

Когда Я пытаюсь открыть эту страницу и получаю такую ​​ошибку:

NoMethodError in selections#create
Showing C:/somedir/myapp/app/views/my_selections/index.html.erb where line #16 raised:
undefined method `my_selection_index_path' for #<#:0x25439c3b>

Строка 16 фрагмент формы, показанный выше.

Все мои другие формы / страницы в том же веб-приложении настроены точно так же и работают нормально. Однако, как только я изменил ссылку формы erb на : my_selection , эта ошибка исчезла, и моя страница вела себя нормально.

Вопросы:

  1. Правильно ли я понимаю разницу между: my_selections и @my_selections ?
  2. Почему переключение на: my_selection устранит мою исходную ошибку?

5
задан Community 23 May 2017 в 12:14
поделиться