使用class_name
时,如何检查实例是否不是类的类型,而是您给该类的名称类型?
class User < ActiveRecord::Base
has_one :dog1, class_name: 'Dog', foreign_key: 'dog_id', dependent: :destroy
has_one :dog2, class_name: 'Dog', foreign_key: 'dog_id', dependent: :destroy
end
换句话说,如何检查@dog
是dog1
还是dog2
?
@dog = Dog.find_by(name: 'Gnasher')
if @dog.is_a?(dog1)
# do some stuff
end
答案 0 :(得分:0)
您无法使用is_a
检查,因为两者都是Dog的实例。
dog1 = @user.dog1
@dog = Dog.find_by(name: 'Gnasher')
if @dog == dog1
# do some stuff
end
答案 1 :(得分:0)
我不确定我是否正确地提出了你的问题但is_a只是检查类是obj的类,还是类是obj中包含的obj或模块的超类之一。 看看这个https://apidock.com/ruby/Object/is_a%3F
将has_one添加到您正在建立关联而不是继承的类中,并且is_a仅用于检查继承