2017-04-05 70 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中找到它。请分享你的发现。 –