如何检查当前devise的用户是否有某一属性的设置?

问题描述 投票:0回答:1

对于这个网站,我使用的是 设计 来创建用户资料。有些用户有特殊的权限属性。在这种情况下,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项目,我使用application.html.erb和Bootstrap。因此,在我的collapse-nav bar中,我在其他if语句中嵌入了这样的内容(确实有效)。

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

然而,即使我的当前用户,即我的登录属性设置为 "true",链接仍然没有显示出来。

html ruby-on-rails devise
1个回答
1
投票

步骤1.)

你不需要在条件语句中使用任何比较,因为一个布尔变量本身就会导致truefalse。

简单的做

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

应该足够了。

步骤2.)当db_admin_status的值是nill(尚未设置)时,你可能会遇到麻烦。)

当db_admin_status的值是nill时,你可能会遇到麻烦(还没有被设置)。你可以通过将该字段默认为 false 的数据库模式中。

运行下面的命令来创建一个rails迁移 将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
投票

你要把你的属性比较为布尔值而不是字符串。

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 没有设置为默认值,这是你想要的吗?当新用户创建时,该值将为nil而不是false。

© www.soinside.com 2019 - 2024. All rights reserved.