Как проверить, имеет ли текущий пользователь из devise определенный набор атрибутов - PullRequest
1 голос
/ 27 апреля 2020

Для этого сайта я использую devise для создания профилей пользователей. У некоторых пользователей есть специальные атрибуты разрешений. В этом случае db_admin_status является логическим атрибутом. Если для пользователя установлено значение True, то я хочу, чтобы на странице появлялись определенные навигационные ссылки.

Вот как выглядит модель пользователя

Table name: users
#
#  id                     :bigint           not null, primary key
#  db_admin_status        :boolean
#  email                  :string           default(""), not null
#  encrypted_password     :string           default(""), not null
#  name                   :string
#  remember_created_at    :datetime
#  reset_password_sent_at :datetime
#  reset_password_token   :string
#  user_name              :string
#  created_at             :datetime         not null
#  updated_at             :datetime         not null

Для этого проекта rails I Я использую приложение. html .erb и Bootstrap. Таким образом, в моей панели срыва коллапса я встроил другие операторы if (которые действительно работают):

<%if current_user.db_admin_status == 'true'%>
 <!--- links appear on nav bar-->
<%end%>

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

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Шаг 1.)

Вам не нужно использовать какие-либо сравнения в условном выражении, поскольку булева переменная сама по себе приведет к true / false.

Достаточно просто сделать

<% if current_user.db_admin_status %>
  // your code
<% end

.

Шаг 2.)

Вы можете столкнуться с проблемами, если значение db_admin_status равно nill (еще не установлено). Это можно исправить, установив для поля по умолчанию значение false в схеме базы данных:

Выполните следующую команду, чтобы создать миграцию рельсов для обновления поля db_admin_status по умолчанию на false.

rails g migration DefaultDbAdminStatusToFalseOnUser

Это должно создать файл db/migrate/20130201121110_default_db_admin_status_to_false_on_user.rb

class DefaultDbAdminStatusToFalseOnUser < ActiveRecord::Migration
  def change
    // your changes go here
  end
end

Измените этот файл, чтобы обновить поле в пользовательской таблице.

change_column :users, :db_admin_status, :boolean, :default => false

И, наконец, перенесите изменения, выполнив:

rake db:migrate
0 голосов
/ 27 апреля 2020

Вы хотите сравнить свой атрибут как логическое, а не строковое.

current_user.db_admin_status == true

Хотя я бы создал вспомогательный метод, который бы проверял, имеет ли пользователь право показывать ссылку, и вызывает этот метод из вашего представления.

def should_show_some_link?
  current_user.db_admin_status? #which will return true or false
end 

Также ваш столбец db_admin_status не установлен по умолчанию, это то, что вы хотите? Когда новый пользователь создаст значение будет ноль, а не ложь.

...