У меня есть модель комментария, что использовать в моих представлениях? @ комментарий, комментарий или комментарий? - PullRequest
2 голосов
/ 24 марта 2010

У меня есть модель комментария, я видел примеры использования @comment, :comment, comment для ссылки на объект в MVC. откуда я знаю что есть что? Есть ли различие?

Ответы [ 2 ]

4 голосов
/ 24 марта 2010
  • @comment относится к переменной экземпляра, которую контроллер Rails делает доступной для представления. Это наиболее распространенное использование
  • :comment является символом Ruby и используется, когда требуется имя модели. Обычно вы увидите это с помощью помощника form_for и других помощников вида, которые Rails предоставляет
  • comment является локальной переменной. Обычно вы увидите это в Rails, когда шаблон представления использует частичный шаблон (просто называемый частичным). Шаблон родительского представления передает одну или несколько своих переменных экземпляра в партиал, чтобы партиал имел доступ к ним / им, что-то вроде:

    <%= render :partial => 'comment', :locals => { :comment => @comment } %>

& mdash; в этом примере частичный комментарий (comment.html.erb) имеет доступ к переменной экземпляра @comment через локальную переменную comment, поэтому он может выполнять такие операции, как comment.author и т. Д.

2 голосов
/ 24 марта 2010

Это действительно зависит от контекста.

Первый, @comment обычно используется (как объяснил Джон Топли) для настройки переменной, которая будет передаваться по цепочке запросов вашим представлениям, помощникам и частичным лицам, отображаемым из этого действия.

Если вы используете его в form_for, вы бы ссылались на объект @comment, который вы, скорее всего, настроили в контроллере:

<% form_for @comment do |f| %>

Если вы передаете объект комментария как локальный фрагмент, вы можете указать его как символ (как сказал Джон Топли):

<%= render :partial => "info", :locals => { :comment => @comment }

И если вы использовали ее как локальную переменную, возможно, вы представляете коллекцию комментариев:

<%= render :partial => @post.comments %>

Передача коллекции comments в частичное самоанализ первого объекта здесь и определение его класса Comment и, следовательно, попытка сделать comments / _comment.html.erb частичным для каждого из элементов в коллекции (независимо от того, какого типа другие, это гоча), делая каждый из них доступным как comment внутри него.

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