Rails 5.1、models和db关系,与用户组共享数据
Rails 5.1, models and db relation, share datas with groups of users
对不起,我真的不知道该把什么放在那里才能真正清楚。所以我的解释会很清楚。
用户可以通过表单创建群组和 Link。用户可以通过成员加入群组,其中成员在 table 中有 group_id
和 user_id
。我希望能够在组内共享用户 Link。
所以当一个用户创建了一个组,其他用户就加入了这个组。目前,当用户创建 link 时,它仅供他自己使用,但我希望用户能够与他所属的组共享(或不共享)他创建的 link。如果用户是多个组的成员,则用户可以选择他想在哪个组中共享他创建的 link。
我有 4 个模型:Link.rb
、User.rb
、Member.rb
和 Group.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
如果您还需要任何其他信息或澄清这一点,请告诉我。
对不起,我真的不知道该把什么放在那里才能真正清楚。所以我的解释会很清楚。
用户可以通过表单创建群组和 Link。用户可以通过成员加入群组,其中成员在 table 中有 group_id
和 user_id
。我希望能够在组内共享用户 Link。
所以当一个用户创建了一个组,其他用户就加入了这个组。目前,当用户创建 link 时,它仅供他自己使用,但我希望用户能够与他所属的组共享(或不共享)他创建的 link。如果用户是多个组的成员,则用户可以选择他想在哪个组中共享他创建的 link。
我有 4 个模型:Link.rb
、User.rb
、Member.rb
和 Group.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
如果您还需要任何其他信息或澄清这一点,请告诉我。