Переход от использования «@user» к использованию «user» в файлах «html.erb»: как и почему? - PullRequest
0 голосов
/ 16 февраля 2011

Я использую Ruby on Rails 3 и Мне посоветовали (@user is a global variable, you can't 'localize' it. I would suggest passing local variables from your controller in the same way.) использовать переменные типа user вместо @user в файлах представления. Зачем именно это делать? .

Итак, я рассматриваю переход от использования @user к использованию user. То есть (в html.erb файле) от использования

@user.name

к использованию

user.name

В это время, например, в методе show моего контроллера у меня есть:

def show
  @user = Users.find(1)
  ...
end

Что мне нужно изменить в контроллере, чтобы это работало в представлениях?

Ответы [ 3 ]

1 голос
/ 16 февраля 2011

Это только то, о чем вам нужно беспокоиться, когда один и тот же фрагмент вызывается в представлениях более чем одного контроллера.

Наличие в нем партиала, использующего @user (вероятно, установленного в users_controller), означает, что в тот момент, когда вы вызываете этот партиал в представлении из какого-либо другого контроллера (например, account_controller), который не устанавливает @users, вы будете получить ошибку. Если вы ссылаетесь только на локальные переменные в вашем партиале, вы можете установить их по мере необходимости из любого контроллера с хешем: locals, который был описан.

1 голос
/ 16 февраля 2011

Это не имеет смысла, только контроллеры экземпляра отправляются в представление.

Никита Рыбак не ошибся в своем ответе, он просто передал переменную экземпляра, содержащуюся в его представлении (@current_user), вчастичное, где у него другое имя (user):

 :locals => { :user => @current_user }

он очень хорошо заключил:

Локальные переменные являются локальными, поэтому вам не нужно @ для ссылкиих.

Действительно, у вас есть два варианта работы с частичным:

  • предполагается, что у него есть доступ к переменной экземпляра (что не рекомендуется)

  • передать переменную экземпляра в парциальное с локальным именем, которое является способом Rails

0 голосов
/ 16 февраля 2011

Взгляните на это Лучшая практика Rails . Использование локальных переменных является предпочтительным способом при рендеринге партиалов (тех, которые просматривают файлы, начинающиеся с _). Это потому, что вам нужно просмотреть код вашего контроллера, чтобы узнать о переменной экземпляра.

...