2016-09-16 44 views
2

不能确定记录没有被保存..为什么记录没有被保存..该方法被正确调用,并且所有字段都存在,并且逻辑正确..这是我的型号代码:当调用before_save动作时记录不保存

class Mine < ActiveRecord::Base 
belongs_to :shop 
validates :merchant_id, presence: true 
validates :auth_token, presence: true 
before_save :assign_three_speed 


private 

    def assign_three_speed 
    if CreateFulfillmentService::NON_US_MARKETPLACES.include? 
    (self.marketplace) 
     self.three_speed = false 
    else 
     self.three_speed = true  
    end 
    end 
end 

那么这是超级疯狂..我把一些记录器,现在它保存??这是我现在的代码:

def assign_three_speed 
    Rails.logger.info "What is self?? #{self.inspect}" 
    if CreateFulfillmentService::NON_US_MARKETPLACES.include? 
    (self.marketplace) 
     self.three_speed = false 
    else 
     self.three_speed = true  
    end 
    Rails.logger.info "Now what is self?? #{self.inspect}" 
    end 

回答

1

在5.0.0之前版本的Rails中,从回调方法返回false将取消保存。从Rails的4.2.7文档:

如果before_ *回调返回false,所有后来的回调和 相关的动作被取消。回调通常以定义的 的顺序运行,除了在模型上定义为 方法的回调例外,它们被称为最后一个。

设置self.three_speed = false时,它是该方法中运行的最后一个语句,因此false是assign_three_speed方法的返回值。这就是为什么将记录器添加到最后一行来修复它的原因。反而有方法返回一些其他值。

返回TRUE的最后一行,如果你从来没有要取消的回调:

def assign_three_speed 
    if CreateFulfillmentService::NON_US_MARKETPLACES.include(self.marketplace) 
    self.three_speed = false 
    else 
    self.three_speed = true  
    end 

    true 
end 
相关问题