将项目分配给多个用户

时间:2016-09-10 21:25:35

标签: ruby-on-rails login devise

我刚开始使用rails并且遇到了一些小问题。

想象一下,您必须拥有用户类型:客户端和管理员。两者都存储在具有布尔值的同一用户模型中(admin = true / false)。这就是我如何区分它们的方式。所以现在有项目。这些只是具有多个属性的帖子,如姓名,描述,类别......

我希望我的管理员能够看到所有项目,他应该能够编辑这些项目,但同时我只想向客户用户显示他被分配到的项目,他不应该能够编辑那些。

总结:管理员 - >查看所有帖子,并能够编辑和分配客户端

客户 - >请参阅分配给他但未能编辑的项目。他应该只看到他被分配到的人。

我该怎么做?

2 个答案:

答案 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