Ruby on Rails еще, если вопрос

У меня есть приложение, где в расположении у меня есть user_name отделение, которое отобразит разные вещи на основе того, зарегистрированы ли они, администратор, и т.д. Прямо сейчас мой код следующий:

  <% if current_user.role == "admin" %>
  <p id="admintxt">You are an admin!</p>
      <%= link_to "Edit Profile", edit_user_path(:current) %>
   <%= link_to "Logout", logout_path %>
  <% elsif current_user %>
   <%= link_to "Edit Profile", edit_user_path(:current) %>
   <%= link_to "Logout", logout_path %>
  <% else %>
<%= link_to "Register", new_user_path %>
<%= link_to "Login", login_path %>
<% end %>

У меня уже есть current_user помощник, и все хорошо работало, когда код был справедлив:

<% if current_user %>
  <%= link_to "Edit Profile", edit_user_path(:current) %>
  <%= link_to "Logout", logout_path %>
<% else %>
    <%= link_to "Register", new_user_path %>
    <%= link_to "Login", login_path %>
<% end %>

Теперь, когда я делаю это elsif оператором, когда я зарегистрирован как администратор, это работает, и я отобразил текст с корректными ссылками. Когда я не администраторский пользователь/выходить из системы, я получаю неопределенный метод 'роль' для nil:NilClass ошибки... Также мой материал current_user объявляется в моем контроллере приложения следующим образом:

helper_method :current_user


private

def current_user_session
  return @current_user_session if defined?(@current_user_session)
  @current_user_session = UserSession.find
end

def current_user
  return @current_user if defined?(@current_user)
  @current_user = current_user_session && current_user_session.record
end

Какие-либо идеи, что я могу сделать для отображения результата, который я хочу? "Если они - пользователь с ролевым атрибутом, равным администратору, они получают некоторый текст и зарегистрированные ссылки, если они - просто пользователь, они получают зарегистрированные ссылки, и если они не зарегистрированы, они получают ссылки входа в систему и регистр.

Спасибо!

8
задан Simone Carletti 21 January 2010 в 17:00
поделиться

3 ответа

Скрыть проверку роли в текущем пользовательском цикле, что имеет побочный эффект упрощения вашего условия.

<% if current_user %>
  <%= content_tag(:p, "You are an admin!", :id=>"admintxt") if current_user.role == "admin" %>
  <%= link_to "Edit Profile", edit_user_path(:current) %>
  <%= link_to "Logout", logout_path %>
<% else %>
  <%= link_to "Register", new_user_path %>
  <%= link_to "Login", login_path %>
<% end %>
5
ответ дан 5 December 2019 в 08:24
поделиться
<% if current_user %>
  <% if current_user.role == "admin" %>
    <p id="admintxt">You are an admin!</p>
    <%= link_to "Edit Profile", edit_user_path(:current) %>
    <%= link_to "Logout", logout_path %>
  <% else %>
    <%= link_to "Edit Profile", edit_user_path(:current) %>
    <%= link_to "Logout", logout_path %>
  <% end %>
<% else %>
  <%= link_to "Register", new_user_path %>
  <%= link_to "Login", login_path %>
<% end %>

или с рельсами> = 2,3

<% if current_user.try(:role) == "admin" %>
  <p id="admintxt">You are an admin!</p>
  <%= link_to "Edit Profile", edit_user_path(:current) %>
  <%= link_to "Logout", logout_path %>
<% elsif current_user %>
  <%= link_to "Edit Profile", edit_user_path(:current) %>
  <%= link_to "Logout", logout_path %>
<% else %>
  <%= link_to "Register", new_user_path %>
  <%= link_to "Login", login_path %>
<% end %>
12
ответ дан 5 December 2019 в 08:24
поделиться
<% if current_user and current_user.role == "admin" %>

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

3
ответ дан 5 December 2019 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: