对不起标题我真的不知道要放在那里要非常清楚。所以我的解释清楚。
用户可以通过表单创建群组和链接。用户可以通过会员加入群组,其中会员在表格中有group_id
和user_id
。我希望能够在组内共享用户链接
因此,当用户创建组时,其他用户将加入此组。目前,当用户创建链接时,它仅适用于自己,但我希望用户能够与他所属的群组共享(或不共享)他创建的链接。如果用户是多个组的成员,则用户可以选择他想要共享他创建的链接的组。
我有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
我尝试了什么:
我在链接表中添加了group_id
的引用。并在belong_to :group
中添加了link.rb
,在has_many :links, dependent: :destroy
中添加了group.rb
。
在我的新链接表单中,我在select中添加了current_user group_id(仅检索用户所在的组),并在创建时使用group_id和current_user id创建链接。这有效。
问题是我必须输入group_id,这意味着我不给用户任何选择,他必须给出group_id所以基本上他必须共享该组的链接。这不是我想要的。
我的想法:
也许我应该像我对成员那样采取同样的想法。这意味着有一个像grouplinks
这样的新表,我给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
可以解决这个问题吗?
感谢您的帮助。
答案 0 :(得分:0)
最好使用group_id和link_id创建连接表。由于组管理员是创建组的用户,因此您甚至不需要添加user_id(我认为是member_id),因为该组的每个成员都可以访问该链接。获取用户组并将该链接添加到该特定组并检查关联。
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
如果您需要其他任何内容或澄清这一点,请告诉我。