我刚开始使用rails并且遇到了一些小问题。
想象一下,您必须拥有用户类型:客户端和管理员。两者都存储在具有布尔值的同一用户模型中(admin = true / false)。这就是我如何区分它们的方式。所以现在有项目。这些只是具有多个属性的帖子,如姓名,描述,类别......
我希望我的管理员能够看到所有项目,他应该能够编辑这些项目,但同时我只想向客户用户显示他被分配到的项目,他不应该能够编辑那些。
总结:管理员 - >查看所有帖子,并能够编辑和分配客户端
客户 - >请参阅分配给他但未能编辑的项目。他应该只看到他被分配到的人。
我该怎么做?
答案 0 :(得分:0)
使项目属于用户。这需要:
生成迁移以添加数据库列(运行此命令):
$ rails g migration AddUserToProjects user:references
将关联添加到您的Project
模型(app/models/project.rb
):
belongs_to :user
将关联添加到您的User
模型(app/models/user.rb
):
has_many :projects
在“项目”控制器中,您希望对以下操作执行操作:
这些看起来像这样(app/controllers/projects_controller.rb
):
class ProjectsController < ApplicationController
before_action :authenticate_user!
before_action :verify_admin_status, :only => [:admin_list]
def user_list
@projects = current_user.projects
end
def admin_list
@projects = Project.all
end
private
def verify_admin_status
unless current_user.admin
raise ActionController::RoutingError.new('Not Found') # or whatever other error you want, i.e. 403
end
end
end
将路线添加到config/routes.rb
文件中:
get 'projects/mine', :to => 'projects#user_list'
get 'projects/admin', :to => 'projects#admin_list'
采用类似的方法来定义编辑操作:使用verify_admin_status
回调检查尝试访问它的用户是否为管理员,然后选择(或更新)项目记录。
答案 1 :(得分:0)
检查您的观点和控制器操作
if current_user.admin