共享项目rails数据库模式



我正在尝试设置共享项目。我如何使用postgresql在rails中做到这一点?

现在用户有许多项。我希望用户能够与其他用户共享项目,但仍然拥有这些项目。所以用户有_many项,而项有_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:through)。例如:

#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

当您想共享一个项目时,只需创建一个新的ItemShare记录,其中user_id和item_id设置为各自的用户和项目。

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

def all_items
  items + shared_items
end

最新更新