2017-04-05 67 views
1

我有2種型號:的Rails:跳過after_create

class User < ActiveRecord::Base 
    has_one :client 
end 

class Client < ActiveRecord::Base 
    belongs_to :user 
end 

和我通常創建一個user第一,並有after_create過濾器,以創建clientuser創建後。

after_create :create_client 

我在client存在一個新的情況下,我想創建的client已經存在後user。在這種情況下,當我創建user時,我想跳過after_create過濾器。

據我所知,我需要after_create :create_client, unless: ____,但我不知道如何區分這一點。

回答

2

對於這種情況,你可以使用attr_accessor

class User < ActiveRecord::Base 
    attr_accessor :has_client 
    ... 
end 

創建一個實例變量,你可以指定boolean值變量與if condition

class User < ActiveRecord::Base 
    ... 
    after_create :create_client, unless: :has_client 
    ... 
end 
+0

我真的只是想通了這一點,因爲我限制after_create看到了你的迴應。出於某種原因,我認爲'attr_accessor'在Rails 4中不見了,但在這種情況下它很有用 –

+0

您可能想到'attr_accessible',這確實在Rails 4中沒有了.' attr_accessor'是一個直接的Ruby特性。 –

+0

@CoreyWoodcox是的,我聽到了相同的聲音,但沒有在官方的Rails Doc中找到它。請分享你的發現。 –