我有两个类,一个父类和一个子类,简化如下。多次设置回调中设置的实例变量
class Parent < ActiveRecord::Base
has_one :child
accepts_nested_attributes_for :child
validates :child, :presence => true
validates_associated :child
end
class Child < ActiveRecord::Base
belongs_to :parent
attr_accessible :third_party_attribute
before_validation :set_attributes
validates :parent, :presence => true
validates :third_party_attribute, :presence => true
def set_attributes
if self.third_party_attribute.nil?
self.third_party_attribute = <MAKE THIRD PARTY FUNCTION CALL>
end
end
end
当我通过在属性(包括子属性),并保存Parent
模型实例,我看到我的孩子验证正在为运行两次(一次验证/保存那个孩子,有一次在父模型中调用validates_associated
)。这部分是有道理的。
问题是,在这两个验证调用中,我的第三方函数调用正在触发。这就像我第一次通过验证设置属性,但第二次通过验证时,对象无法识别其属性已被设置。令人沮丧的是,有一个真正的美元成本与调用这个第三方服务相关,所以我无法真正地重复调用。
我该如何解决这个问题,以便第三方调用只进行一次,无论对象在保存之前进行了多少次验证?
有可能是在你的控制器来解决此问题的方法...你能张贴有关你的控制器操作代码? – zeantsoi
此时没有控制器操作。错误发生在保存在控制台的参数中。 – Bryce
你在控制台上具体运行什么? – zeantsoi