共享项目rails数据库架构

我正在尝试设置共享项目。我将如何使用postgresql在rails中执行此操作?共享项目rails数据库架构

现在用户has_many项目。我希望用户能够与其他用户共享项目,但仍拥有这些项目。因此用户has_many项目和项目has_many用户。我不能做has_and_belongs_to_many,因为我希望项目的所有者具有不同于共享用户的权限。我将如何建立关系?项目是否有一个shared_id,以某种方式指向用户?

编辑:这是什么工作

#user.rb 

has_many :items

has_many :sharrings

has_many :shared_items, :foreign_key => "item_id", :through => :sharrings, :source => :item

#user.rb

belongs_to :user

has_many :sharrings

has_many :shared_users, :foreign_key => "user_id", :through => :sharrings, :source => :user

#sharring.rb

belongs_to :shareduser

belongs_to :item

# create sharring

@item.sharrings.build :user_id => other_user.id

# get items shared with this user

@shared_items = current_user.shared_items

回答:

你可以建立两个独立的用户关系 - 一个所有权(的has_many)和一个共享(的has_many:通过)。例如:

#user.rb 

Class User < ActiveRecord::Base

has_many :items

has_many :shared_items, :foreign_key => "shared_user_id", :through => :item_shares

end

#item.rb

Class Item < ActiveRecord::Base

belongs_to :user

has_many :shared_users, :foreign_key => "shared_item_id", :through => :item_shares

end

#item_share.rb

Class ItemShare < ActiveRecord::Base

belongs_to :shared_user, :class_name => "User"

belongs_to :shared_item, :class_name => "Item"

end

当你想要分享的项目,刚刚创建的user_id新ItemShare记录和ITEM_ID设置为相应的用户和项目。

你也可以在用户类中创建一个方法来获得两个拥有和共享的项目:

def all_items 

items + shared_items

end

以上是 共享项目rails数据库架构 的全部内容, 来源链接: utcz.com/qa/260624.html

回到顶部