对于这个网站,我使用的是 设计 来创建用户资料。有些用户有特殊的权限属性。在这种情况下,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",链接仍然没有显示出来。
你不需要在条件语句中使用任何比较,因为一个布尔变量本身就会导致truefalse。
简单的做
<% if current_user.db_admin_status %>
// your code
<% end
应该足够了。
当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
你要把你的属性比较为布尔值而不是字符串。
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。