схема базы данных рельсов - PullRequest
       14

схема базы данных рельсов

0 голосов
/ 14 апреля 2011

Я пытаюсь настроить общий доступ к элементам.Как бы я сделал это в рельсах, используя postgresql?

Прямо сейчас пользователи has_many items.Я хочу, чтобы пользователи могли обмениваться объектами с другими пользователями, но при этом владеть этими объектами.Таким образом, пользователи 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

1 Ответ

0 голосов
/ 14 апреля 2011

Вы можете установить два отдельных отношения пользователя - одно для владения (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...