2017-08-30 28 views
0

當使用class_name時,如何檢查實例是否不是類的類型,而是您給類的名稱的類型?Rails - 使用is_a? with 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 
+0

嘗試'繼承和is_a @ dog.class.model_name'不知道,雖然 – Pavan

+0

我敢肯定你想要'@狗==狗1'。或者,至少,'@ dog.id == dog1.id' –

+0

我不認爲這會起作用,因爲有很多'dog1's,每個屬於不同的用戶。 – Bazley

回答

0

您不能使用is_a來檢查,因爲兩者都是Dog的實例。

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

我不知道我是否正確或沒有得到你的問題,但是is_a只是檢查是否類是類obj的,或者如果類是OBJ或模塊的一個父列入OBJ。 看看這個https://apidock.com/ruby/Object/is_a%3F

加入HAS_ONE一類你正在關聯不只是檢查繼承