Ruby on rails Rails 4:仅请求查看访问用户记录(自引用)

Ruby on rails Rails 4:仅请求查看访问用户记录(自引用),ruby-on-rails,activerecord,ember.js,Ruby On Rails,Activerecord,Ember.js,我的目标是为用户提供一种发送请求的方式,以便与具有director角色的用户以及请求访问的director共享这些记录。因此,经过一些调查,我意识到这种设置与社交媒体平台发送好友请求的方式非常相似。但是,对于查看记录而言,请求是片面的 用户A希望与具有管理类型角色的用户B共享其“记录” 我的结论是,这与制作一个名为“请求”的表格有关,在该表格中,状态为[待定,已接受]。可能是另一个州被发送 到目前为止,我想出了 rails g model request user:reference stat

我的目标是为用户提供一种发送请求的方式,以便与具有director角色的用户以及请求访问的director共享这些记录。因此,经过一些调查,我意识到这种设置与社交媒体平台发送好友请求的方式非常相似。但是,对于查看记录而言,请求是片面的

用户A希望与具有管理类型角色的用户B共享其“记录”

我的结论是,这与制作一个名为“请求”的表格有关,在该表格中,状态为[待定,已接受]。可能是另一个州被发送

到目前为止,我想出了

 rails g model request user:reference status:string
模型文件

 class Request < ActiveRecord::Base
   belongs_to :user
   belongs_to :student, class_name: 'User', foreign_key: 'user_id'
 end


 class User < ActiveRecord::Base
   ...

   has_many :students
   has_many :requests
   has_many :accepted_requests, :class_name => "Request", -> { where(requests: {status: 'accepted'})
   has_many :pending_requests, :class_name => "Request", -> { where(requests: {status: 'pending'})
   has_many :sent_requests, :class_name => "Request", -> { where(requests: {status: 'sent'})

   ...
 end
我找到了一些很好的资源,但不确定如何片面地实现

总的来说,我希望directors的用户角色能够查询

 User.where(role: 'director', email: 'user@example.com').first.students -> Access to any records of the following users who accepted the request. 
然后还可以访问

 @user.pending_requests (owned by user that received the request)
 @user.accepted_requests (possibly seen on both sides, so regular users can also delete accepted requests)
 @user.sent_requests (owned by user who sent request).

有人指导我下一步或是遗漏的部分吗?

经过一番熨烫和大量操作,我终于得到了答案

迁移

rails g model director_id:integer student_id:integer accepted:boolean
请求模型

belongs_to :director, class_name: 'User'
belongs_to :student, class_name: 'User'
用户模型

has_many :requests, foreign_key: :director_id, dependent: :destroy
has_many :received_requests, foreign_key: :student_id, class_name: 'Request', dependent: :destroy
has_many :directors, through: :received_requests, source: :director
has_many :students, -> { where  "requests.accepted = true" }, through: :requests, source: :student
现在您可以创建请求并使用@user.students@user.directors 学生们只有在被接受为真的情况下才会出现

导演是唯一有权发送请求并可以通过@user.requests查看其请求的人,学生可以通过@user.received\u请求查看其当前请求

下面是我在Ember中为用户模型所做的

directors: DS.hasMany('user', {inverse: 'students'}),
students: DS.hasMany('user', {inverse: 'directors', async: true}),
requests: DS.hasMany('request'),
receivedRequests: DS.hasMany('request', {async: true}),
directors: DS.hasMany('user', {inverse: 'students'}),
students: DS.hasMany('user', {inverse: 'directors', async: true}),
requests: DS.hasMany('request'),
receivedRequests: DS.hasMany('request', {async: true}),