如何从设计中检查当前用户是否具有特定的属性集
How to check if the current user from devise has a certain attribute set
对于这个网站,我使用 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 项目,我使用 application.html.erb 和 Bootstrap。所以在我的折叠导航栏中,我嵌入了其他 if 语句(确实有效):
<%if current_user.db_admin_status == 'true'%>
<!--- links appear on nav bar-->
<%end%>
然而,即使我当前登录的用户将属性设置为 true,链接仍然不会显示
您想将您的属性作为布尔值而不是字符串进行比较。
current_user.db_admin_status == true
尽管我会创建一个辅助方法来检查用户是否有资格显示 link 并从您的视图中调用该方法。
def should_show_some_link?
current_user.db_admin_status? #which will return true or false
end
您的列 db_admin_status
也没有设置为默认值,这是您想要的吗?当新用户创建时,该值将为 nil 而不是 false。
步骤 1.)
您不需要在条件语句中使用任何比较,因为布尔变量本身只会导致 true/false。
简单做
<% if current_user.db_admin_status %>
// your code
<% end
应该足够了。
步骤 2.)
当 db_admin_status 的值为 null(尚未设置)时,您可能 运行 会遇到麻烦。您可以通过在数据库架构中将该字段默认为 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
修改此文件以更新您在用户 table 上的字段。
change_column :users, :db_admin_status, :boolean, :default => false
然后最后通过 运行ning 迁移您的更改:
rake db:migrate
对于这个网站,我使用 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 项目,我使用 application.html.erb 和 Bootstrap。所以在我的折叠导航栏中,我嵌入了其他 if 语句(确实有效):
<%if current_user.db_admin_status == 'true'%>
<!--- links appear on nav bar-->
<%end%>
然而,即使我当前登录的用户将属性设置为 true,链接仍然不会显示
您想将您的属性作为布尔值而不是字符串进行比较。
current_user.db_admin_status == true
尽管我会创建一个辅助方法来检查用户是否有资格显示 link 并从您的视图中调用该方法。
def should_show_some_link?
current_user.db_admin_status? #which will return true or false
end
您的列 db_admin_status
也没有设置为默认值,这是您想要的吗?当新用户创建时,该值将为 nil 而不是 false。
步骤 1.)
您不需要在条件语句中使用任何比较,因为布尔变量本身只会导致 true/false。
简单做
<% if current_user.db_admin_status %>
// your code
<% end
应该足够了。
步骤 2.)
当 db_admin_status 的值为 null(尚未设置)时,您可能 运行 会遇到麻烦。您可以通过在数据库架构中将该字段默认为 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
修改此文件以更新您在用户 table 上的字段。
change_column :users, :db_admin_status, :boolean, :default => false
然后最后通过 运行ning 迁移您的更改:
rake db:migrate