2016-11-22 2 views
0

Привет У меня есть эта озабоченность в модели/проблем/permissions_concernКак вызвать метод беспокойства в rails .erb?

Это проверить мою таблицу пользователей и permission_level столбец, который имеет тип integer.So, если пользователь обладает правами администратора, я хочу, чтобы он был в состоянии получить доступ в Navbar иметь особый ссылка

module PermissionsConcern 
    extend ActiveSupport::Concern 
    def is_normal_user? 
     self.permission_level >= 1 
    end 

    def is_editor? 
     self.permission_level >= 2 
    end 

    def is_admin? 
     self.permission_level >= 3 
    end 
end 

Я хочу знать, если это можно назвать модуль на страницу Еврорадио так, например:

<li class="nav-item"> 
    <% if is_admin? %> 
     <%= link_to "Dashboard", articles_path, class: 'nav-link' %> 
    <%else%> 
     <li class="nav-item"> 
     <%= link_to 'Login', new_user_session_path, class: 'btn btn-outline-success' %> 
     </li> 
     <li class="nav-item"> 
     <%= link_to 'Register', new_user_registration_path, class: 'btn btn-outline-info' %> 
     </li> 
    <%end%> 

</li> 

Но я получаю эту ошибку

undefined method `is_admin? ' для # < #: 0x007f962f818680> Это нормально, потому что это не метод. Но есть ли способ вызвать беспокойство на странице erb?

ответ

1

Если это в беспокойство вам нужно include что или указать полный путь:

if PermissionsConcern.is_admin? 

Дело в том, вы, вероятно, хотите сделать что помощник вместо этого, если вы планируете использовать его внутри видом , Эти ссылки на self будут бессмысленными в непосредственной заботе.

1

Чтобы добавить небольшой контекст к ответу тадмана, проблемы обычно используются для консолидации методов, используемых несколькими моделями. Это не похоже на то, что вы пытаетесь выполнить. Похоже, вы пытаетесь упростить свою логику взглядов. Для этого помощники - это путь. Таким образом, вам понадобится способ для is_admin?, чтобы найти пользователя, который в настоящее время вошел в систему и проверить уровень их разрешения.

У вас есть вспомогательный файл приложения, который называется application_helper.rb. Вместо того, чтобы иметь is_admin? в концерне (я предполагаю, что он включен в вашу модель User), вы можете поместить его в application_helper.rb, и он будет доступен для всех ваших просмотров. Но у вас будет проблема! Метод is_admin? не будет знать о пользователе, чтобы он взорвался. Если вы используете Завещание для аутентификации, вы должны иметь current_user метод, который ссылается на человеке, который авторизован Вы можете изменить метод is_admin? в файле application_helper.rb на:.

def is_admin? 
    current_user.permission_level >= 3 
end 

И вы должны быть все готовы. Удачи!

Дополнительная информация по следующим вопросам: https://stackoverflow.com/a/25858075/320490

Смежные вопросы