Rails 5.1、models和db关系,与用户组共享数据

Rails 5.1, models and db relation, share datas with groups of users

对不起,我真的不知道该把什么放在那里才能真正清楚。所以我的解释会很清楚。

用户可以通过表单创建群组和 Link。用户可以通过成员加入群组,其中成员在 table 中有 group_iduser_id。我希望能够在组内共享用户 Link。
所以当一个用户创建了一个组,其他用户就加入了这个组。目前,当用户创建 link 时,它仅供他自己使用,但我希望用户能够与他所属的组共享(或不共享)他创建的 link。如果用户是多个组的成员,则用户可以选择他想在哪个组中共享他创建的 link。

我有 4 个模型:Link.rbUser.rbMember.rbGroup.rb。这是我的关系:

#Link.rb:

    class Link < ApplicationRecord
        belongs_to :user
    end  

#User.rb :

    class User < ApplicationRecord
      has_many :links, dependent: :destroy
      has_many :members, :dependent => :destroy
      has_many :groups, :through => :members
    end  

#Member.rb :

    class Member < ApplicationRecord
      belongs_to :user
      belongs_to :group

      validates :user_id, :presence => true
      validates :group_id, :presence => true
      validates :user_id, :uniqueness => {:scope => [:user_id, :group_id]}
    end

#Group.rb :

    class Group < ApplicationRecord
    has_secure_token :auth_token

        has_many :members, :dependent => :destroy
        has_many :users, through: :members, source: :user
        belongs_to :owner, class_name: "User"


        def to_param
            auth_token
        end

    end

我尝试了什么:
我在 link table 中添加了 group_id 的引用。并在 link.rb 中添加 belong_to :group,在 group.rb 中添加 has_many :links, dependent: :destroy

在我的新 link 表单中,我在 select 中添加了 current_user group_id(仅检索用户所在的组)并创建link 是使用 group_id 和 current_user id 创建的。行得通。
问题是我必须输入 group_id,这意味着我没有给用户选择,他必须输入 group_id,所以基本上他必须将 link 分享给群组。这不是我想要的。

我的想法:
也许我应该采用与成员相同的想法。这意味着有一个像 grouplinks 这样的新 table,我在其中给出 group_id、link_id 和 user_id 关系,这样我就可以使用 grouplink.id 是否在我的群组中分享。这是一个好的选择吗?如果是,我应该建立什么关系?任何其他建议,也许我完全错了,有些事情很容易做到,但我看不到。

我会尝试使用一些我想到的代码来尝试:

#Link.rb:

    class Link < ApplicationRecord
        belongs_to :user
        belongs_to :grouplink
    end  

#User.rb :

    class User < ApplicationRecord
      has_many :links, dependent: :destroy
      has_many :grouplinks, dependent: :destroy
      has_many :members, :dependent => :destroy
      has_many :groups, :through => :members
    end  

#Grouplink.rb :

    class Member < ApplicationRecord
      belongs_to :user
      belongs_to :group
      belongs_to :link
    end

#Group.rb :

    class Group < ApplicationRecord
    has_secure_token :auth_token

        has_many :members, :dependent => :destroy
        has_many :users, through: :members, source: :user
        belongs_to :owner, class_name: "User"
        has_many :groupslinks, :dependent => :destroy
        has_many :links, through: :grouplinks


        def to_param
            auth_token
        end

    end

这行得通吗?

感谢您的帮助。

最好创建一个 table 与 group_id 和 link_id 的连接。由于组管理员是创建组的用户,您甚至不需要添加 user_id(我想是 member_id),因为该组的每个成员都可以访问 link。获取用户组并将 link 添加到该特定组并检查关联。

class GroupLink belongs_to :group belongs_to :link 你可以做

@group = @user.groups.find(params[:group_id]) @group_link = @group.group_links.build(link_id: link_id) @group_link.save

如果您还需要任何其他信息或澄清这一点,请告诉我。