我有兩個類,一個父類和一個子類,簡化如下。多次設置回調中設置的實例變量
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