Rails - 使用is_a?使用class_name

时间:2017-08-30 12:33:14

标签: ruby-on-rails

使用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

换句话说,如何检查@dogdog1还是dog2

@dog = Dog.find_by(name: 'Gnasher')
if @dog.is_a?(dog1)
  # do some stuff
end

2 个答案:

答案 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仅用于检查继承