У меня очень простая пользовательская модель.Когда я впервые его создал, в нем было три поля email
, password_hash
и password_salt
.
. Я недавно добавил поле к этой модели, чтобы пользователь мог задать отображаемое имя,поле называется display
.Я использовал метод, описанный в этом ответе .То, что я набрал в терминале, выглядело бы так:
script/rails g migration add_display_to_users display:string
, а затем
rake db:migrate
Это работало нормально, и после изменения формы регистрации я смог добавить эти данные вбазы данных.
В моем макете приложения я хочу отобразить отображаемое имя пользователя в заголовке.Итак, в моем контроллере приложения есть метод, который я вызываю в каждом контроллере для получения панели навигации, называемый nav_bar
.В этом методе я также устанавливаю переменную экземпляра @user
, если они вошли в систему.
Поскольку метод nav_bar
вызывается в контроллере приложения, я могу получить к нему доступ из макета приложения.Итак, я попытался показать их электронную почту в заголовке в качестве теста, например так:
<% if @user %>
<div class="ac_button">
<%= @user.email %>
</div>
<% end %>
Это отлично работает, и отображает их электронную почту в заголовке.Однако, если я изменю его на
<%= @user.display %>
, он ничего не отобразит.
Самое странное, если я вызову @user.email
или любое другое свойство пользователя где-то вКонтроллер моего приложения или макет.Это работает, и показывает их отображаемое имя.Я понятия не имею, почему это заставило бы это работать, но это делает.
Например, если после нахождения пользователя в контроллере приложения я вызываю @user.email
, он тогда покажет их отображаемое имя в макетехорошо.
def nav_bar
if session[:user_id]
@user = User.find(session[:user_id])
@user.email
end
# create and return the navbar
end
Или, если в макете я вызываю свойство пользователя где угодно, оно также работает.
<div class="ac_button">
<% @user.password_hash %>
<%= @user.display %>
</div>
Если кто-нибудь может объяснить это очень странное поведение, я будупоражаюсь!