Как создать группу пользователей (roomates) в рамках одного продукта (свойства) в Rails - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть вопрос о платформе, которую я разрабатываю в Ruby на Rails 5.2.

У меня есть модель Owner, которая является владельцем свойств / собственности. Владелец опубликует свойство, чтобы пользователи (в данном случае roomates) могли использовать одно и то же свойство / дом / отдел и т. Д. c.

У меня есть Владельцы, и у меня есть Пользователи (обе таблицы созданы с использованием устройства):

Owner.rb:

class Owner < ApplicationRecord
  has_many :properties
end

User.rb:

class User < ApplicationRecord
   #Theres nothing here (yet)
end

Вот где происходят маги c. Property.rb:

class Property < ApplicationRecord
    belongs_to :owner
    has_many :amenities
    has_many :services

    accepts_nested_attributes_for :amenities
    accepts_nested_attributes_for :services
    mount_uploaders :pictures, PropertypictureUploader
    validates :amenities, :services,  presence: true 

    scope :latest, -> { order created_at: :desc }

end

Как несколько пользователей могут совместно использовать свойство? Я знаю, что у него будет связь «многие ко многим», но я немного запутался, как связать эти отношения, поэтому, когда владелец публикует свойство, он отображает что-то вроде:

Property available for: 3 users

И затем начните ограничивать пользователей до тех пор, пока не будет завершено количество доступных пользователей.

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Это звучит как ваше среднее число ко многим ассоциациям:

class User < ApplicationRecord
  has_many :tenancies, foreign_key: :tenant_id
  has_many :properties, through: :tenancies
end

class Tenancy < ApplicationRecord
  belongs_to :tenant, class_name: 'User'
  belongs_to :property
end

class Property < ApplicationRecord
  has_many :tenancies
  has_many :tenants, through: :tenancies

  def availablity
    # or whatever attribute you have that defines the maximum number
    max_tenants - tenancies.count
  end
end

Вы можете ограничить количество арендаторов с помощью пользовательской проверки .

1 голос
/ 11 февраля 2020

Вы можете использовать таблицу соединений, которая называется users_properties. Эта таблица будет иметь property_id и user_id. В вашей properties модели вы получите следующее:

has_many :users_properties
has_many :users, through: :users_properties

Подробнее об этом здесь https://guides.rubyonrails.org/association_basics.html

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