2016-10-25 2 views
0

У меня есть метод user_authenticate, который устанавливает @current_user на основе сеанса. У меня есть панель навигации, содержащая ссылки на навигацию. Я хочу скрыть одну из ссылок и показать ее только в том случае, если идентификатор пользователя равен 8 (это admin). Я написал макет, как это.using link_to inside if

<div align="center" style="width: 90%"> 
<nav class="navbar navbar-inverse" role="navigation"> 
    <%= link_to "Home", '/', :class => "btn btn-default navbar-btn"%> 
    <%= link_to "Currency Master", currencies_url, :class => "btn btn-default navbar-btn"%> 
    <%= link_to "Receipts", receipts_url, :class => "btn btn-default navbar-btn"%> 
    <%= link_to "Expenses", expenses_url, :class => "btn btn-default navbar-btn"%> 
    <%= link_to "Exchange", exchanges_url, :class => "btn btn-default navbar-btn"%> 
    <% if @current_user.id == 8 %><%= link_to "Report", reports_url, :class => "btn btn-default navbar-btn" %> 
    <% end %> 
</nav> 

код работает отлично, что он показывает кнопку «Отчет» на навигационной панели только пользовательский идентификатор 8. Но как только я нажимаю на ссылку я получаю следующее сообщение об ошибке.

undefined method `id' for nil:NilClass 
Extracted source (around line #8): 
6 
7 
8 
9 
10 

    <%= link_to "Expenses", expenses_url, :class => "btn btn-default navbar-btn"%> 
    <%= link_to "Exchange", exchanges_url, :class => "btn btn-default navbar-btn"%> 
    <% if @current_user.id == 8 %><%= link_to "Report", reports_url, :class => "btn btn-default navbar-btn" %> 
    <% end %> 
</nav> 
+0

Вы можете добавить полные журналы ошибок? – Zero

ответ

1

Сначала вы не должны проверять, является ли пользователь администратором по ID. Вы можете иметь столбец «is_admin» логического типа и проверить, как это:

if @current_user.is_admin? 
# ... 

Во-вторых, перед тем проверьте значение столбца, вы можете проверить первый, если сам объект существует. Таким образом, ваше состояние может быть таким:

if @current_user && @curent_user.is_admin? 
    # show admin menu 
else 
    # show other menus 
end 
+0

Мне нравится ваше решение, так как оно также даст мне варианты создания нескольких администраторов, но когда я попробую его, как показано ниже – Parry

+0

Мне нравится ваше решение, так как оно также даст мне варианты создания нескольких администраторов, но когда я попробую его, как показано ниже '<%, если @current_user && @ current_user.is_admin%><% = link_to "отчет", reports_url,: класс => "БТН БТН-умолчанию Navbar-BTN" %> <% end %> ' я получаю следующее ошибка ** неопределенный метод 'is_admin 'для # <Пользователь: 0xd69ae08 ** – Parry

+0

@Parry извините задержка. Это потому, что у вас нет этой колонки. Вам нужно создать миграцию, чтобы добавить этот столбец с булевым типом – psantos

1

Вы проверяете @current_user.id даже если @current_user нет. поэтому он дает ошибку.

Сначала проверьте наличие CURRENT_USER, а затем проверить идентификатор,

@current_user.present? && @current_user.id == 8

Изменение этой линии,

<% if @current_user.id == 8 %><%= link_to "Report", reports_url, :class => "btn btn-default navbar-btn" %> 
    <% end %> 

к,

<% if (@current_user.present? && @current_user.id == 8) %><%= link_to "Report", reports_url, :class => "btn btn-default navbar-btn" %> 
    <% end %> 
+0

@ Парри, ты проверил это? – Sravan