Rails 从头开始管理
Rails admin from scratch
我试图在不使用 gem 的情况下创建 rails 管理员。
我有管理员登录名和命名空间。我的问题是我如何区分管理员和外部管理员的用户模型。
假设用户模型有一个控制器,其中包含操作编辑更新新创建。我想对管理员使用相同的操作。但是我必须创建另一个控制器还是应该使用相同的控制器?
有很多方法可以做到。这取决于您的项目及其复杂性。最简单的解决方案是在您的用户模型中添加管理列,例如:
rails generate migration AddAdminToUsers admin:boolean
rails db:migrate
并将 true 分配给您的数据库用户 table 中的管理员用户。例如,您数据库中的第一个用户。在 rails 控制台中:
rails c
user = User.first # The console will load first user
user.admin = 1 # It will return true
user.save # It will save and assign true to admin user
那么你只需要在application_controller.rb中做简单的逻辑,然后从你的视图中调用方法is_admin?
。 (假设您已经将用户 ID 存储在会话哈希中:session[:user_id] = user.id
)
helper_method :current_user, :signed_in?, :is_admin?
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
def signed_in?
!!current_user
end
def is_admin?
signed_in? ? current_user.admin : false
end
还有很多其他方法,例如添加角色、区分管理员 table 和用户 table。如果您选择区分管理员和用户 table,您还需要管理控制器和管理模型。我希望我给了你开始的想法。
我试图在不使用 gem 的情况下创建 rails 管理员。
我有管理员登录名和命名空间。我的问题是我如何区分管理员和外部管理员的用户模型。
假设用户模型有一个控制器,其中包含操作编辑更新新创建。我想对管理员使用相同的操作。但是我必须创建另一个控制器还是应该使用相同的控制器?
有很多方法可以做到。这取决于您的项目及其复杂性。最简单的解决方案是在您的用户模型中添加管理列,例如:
rails generate migration AddAdminToUsers admin:boolean
rails db:migrate
并将 true 分配给您的数据库用户 table 中的管理员用户。例如,您数据库中的第一个用户。在 rails 控制台中:
rails c
user = User.first # The console will load first user
user.admin = 1 # It will return true
user.save # It will save and assign true to admin user
那么你只需要在application_controller.rb中做简单的逻辑,然后从你的视图中调用方法is_admin?
。 (假设您已经将用户 ID 存储在会话哈希中:session[:user_id] = user.id
)
helper_method :current_user, :signed_in?, :is_admin?
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
def signed_in?
!!current_user
end
def is_admin?
signed_in? ? current_user.admin : false
end
还有很多其他方法,例如添加角色、区分管理员 table 和用户 table。如果您选择区分管理员和用户 table,您还需要管理控制器和管理模型。我希望我给了你开始的想法。