【问题标题】:Rails 4: Request view only access to users records (Self-Referential)Rails 4:请求查看仅访问用户记录(自引用)
【发布时间】:2015-07-03 15:28:33
【问题描述】:

我的目标是为用户提供一种发送请求的方式,以便与具有主管角色的用户以及请求访问权限的主管共享记录。所以经过一番调查,我意识到这个设置与社交媒体平台发送好友请求的方式非常相似。但是,对于查看记录,请求将是一面倒的。

用户 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

Ember CLI 模型(用户)

export default DS.Model.extend({
  requests: DS.hasMany('request')
  students: DS.hasMany('student', {inverse: true});
});

我找到了一些很好的资源,但不知道如何单方面实施。

Friendship has_many through model with multiple status'

http://railscasts.com/episodes/163-self-referential-association

总的来说我希望导演的用户角色能够查询

 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).

有人指导我进行下一步或缺少部分吗?

【问题讨论】:

    标签: ruby-on-rails activerecord ember.js


    【解决方案1】:

    经过一番整理和大量操作,我终于得到了答案。

    迁移

    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_requests查看他当前的请求

    这是我在 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}),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多