Все является объектом в Python, который включает в себя ints, строки, функции и классы. Поэтому isinstance(a, object)
вернет вас True
. Но 3 - это integer
, который является sub_class
созданным из object
. Поэтому type(a)
может быть только int
.
Я могу привести пример.
Предположим, что у нас есть два класса: Sub - это sub_class of Base.
class Base:
def __init__(self):
self.kappa='kappa'
class Sub(Base):
def __init__(self):
super().__init__()
obj=Base()
int_rino=Sub()
print(isinstance(obj,Base))
print(isinstance(obj,Sub))
print(isinstance(int_rino,Base))
print(isinstance(int_rino,Sub))
print(type(int_rino)==Base)
Результат будет:
True
False
True
True
False
Я думаю, что отношение между User
и Room
является отношением «многие ко многим». Затем используйте :has_and_belongs_to_many
:
https://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
[ 1112] Но если вы хотите установить соотношение междуUser
и Participant
как многие-ко-многим, используйте опцию :through
:
https://guides.rubyonrails.org/ association_basics.html # the-has-many-through-association
Я думаю, таблица Participant
не обязательна, просто временная переменная participants
выглядит нормально.
Ваша participant
модель имеет ассоциативное имя users
.
Вы можете установить ассоциацию has many through
следующим образом:
# room.rb
belongs_to :user
has_many :participants
has_many :users, through: :participants
, чтобы в вашем контроллере вы могли получить пользователей комнаты:
room = Room.find(1)
users = room.users