Rails - логика БД, объем данных по компании - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть 3 модели: User, Receipt и Article.

Единственная ассоциация: квитанция has_many статьи.

Теперь мне нужна 4. модель, которая Company.Пользователь принадлежит компании, а Компания имеет пользователей.

Пользователь должен видеть только квитанции и статьи, которые находятся в его компании.Нужно ли указывать company_id в разделе «Пользователь, квитанции и статьи» и просматривать по этому идентификатору, или есть лучший способ?

Ответы [ 3 ]

0 голосов
/ 22 сентября 2018

Пользователь должен видеть только квитанции и статьи, которые находятся в его компании

Настройте ваши ассоциации следующим образом:

#app/models/user.rb
class User < ApplicationRecord
  belongs_to :company
end

#app/models/company.rb
class Company < ApplicationRecord
  has_many :users
  has_many :receipts
  has_many :articles, through: :receipts
end

#app/models/receipt.rb
class Receipt < ApplicationRecord
  belongs_to :company
  has_many :articles
end

#app/models/article.rb
class Article < ApplicationRecord
  belongs_to :receipt
end

Теперь вы можете позвонить @user.company.receipts и@user.company.articles

Нужно ли указывать company_id в разделе «Пользователь, квитанции и статьи» и просматривать по этому идентификатору

При вышеуказанном подходе вам нужно иметь company_id вusers и receipts.

0 голосов
/ 22 сентября 2018

Создать связь между двумя таблицами

class Receipt < ApplicationRecord
 belongs_to :company
end

class Company < ApplicationRecord
 has_many :receipts
end

Получить запись простым способом, используя эту связь в модели

, например: user.company.receipt.first.article

0 голосов
/ 22 сентября 2018

Вам обязательно нужно указывать company_id в User, если вы не собираетесь работать с несколькими арендаторами.И вам также нужно будет указать company_id в квитанции, но не в статье, так как она уже связана с квитанцией.Для доступа к квитанциям вам нужно просто набрать user.company.receipts

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...