Как написать пользовательскую функцию в модели в ruby ​​на рельсах? - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть класс модели User, который я создал с помощью Devise.

У меня есть поле роли (admin = 0, user = 1) в моей модели.

Снимок экрана моей базы данных:

Screenshot of my database

Просмотр HTML

<% if current_user.active_admin? %>
  <%= render 'layouts/admin' %>   
<% else %>
  <%= render 'layouts/user' %>
<% end %>

Модель

def active_admin?
   #your logic here
end

Я хочу войти в систему.Если я роль администратора для проверки - это 0 визуализаций для макетов / администратор, в противном случае я - роль для проверки пользователя, которая выполняет 1 визуализацию для макетов / пользователей.

Как мне написать код в модели для этого?

Ответы [ 5 ]

0 голосов
/ 05 декабря 2018

Одним способом можно добавить метод на контроллере приложения, как

  def after_sign_in_path_for(resource_or_scope)
    if current_user.role==0
      #your admin path
    else
      root_path
    end
  end


  def authenticate_admin
    unless (user_signed_in? and current_user.role !=0 )
      redirect_to '/users/sign_in'
    end
  end

добавить к необходимому контроллеру

  before_filter :authenticate_admin
  layout 'admin'
0 голосов
/ 04 декабря 2018

Нет необходимости добавлять метод для проверки ролей, вы можете напрямую достичь этого путем изменения ниже.Он вернет истину для всего, кроме 0.

<% if current_user.role? %>
  <%= render 'layouts/user' %>        
<% else %>
  <%= render 'layouts/admin' %> 
<% end %>
0 голосов
/ 04 декабря 2018

попробуйте это в своем HTML, не используя модель

<%if  current_user.role==0 %>
<%=  render 'layouts/admin' %>
<%else%>
<%=  render 'layouts/user' %>
<% end %>
0 голосов
/ 04 декабря 2018

Как говорит Марк, вы можете просто проверить role на 0 или 1.

Любой столбец в вашей базе данных будет напрямую связан с методом в модели.

Пара точек:

  • Если вы используете Rails 5, вам нужно наследовать от ApplicationRecord, а не ActiveRecord::Base.
  • В более новых версиях Ruby вы можете использовать #zero? метод:
class User < ApplicationRecord
  def active_admin?
    role.zero?
  end
end
0 голосов
/ 04 декабря 2018

В вашем файле user.rb:

class User < ActiveRecord::Base
  def active_admin?
    role == 0
  end
end

На ваш взгляд:

<% if current_user.active_admin? %>
  <%= render 'layouts/admin' %>   
<% else %>
  <%= render 'layouts/user' %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...