3
我們的ActiveRecord模型具有許多不幸使用網絡的驗證。例如,它使用Facebook API來驗證給定的Facebook ID屬性。我希望將這些驗證移出模型,以便它們僅在特定上下文中運行,而不是在Factory Girl在測試中創建時運行。它還需要以ActiveAdmin兼容的方式完成。將驗證回調添加到Ruby on Rails中的ActiveRecord實例
我的想法是將方法提取到模塊,並讓該模塊適當擴展AR實例。
module ArtistConnectionValidations
def self.inject_to(record)
record.extend self
record.class_eval do
before_validation :validate_facebook_name
end
end
def validate_facebook_name
# Contact Facebook API
end
end
在ActiveAdmin它採用繼承的資源:
controller do # Executes in controller context
def resource
ArtistConnectionValidations.inject_to(Artist.find(params[:id]))
end
end
不幸的是,他們被添加到實例單類和#valid?
方法回調看不出來這些驗證不會被調用。各種其他策略導致它被添加到基類中,感染整個系統。有任何想法嗎?
這是一個合理的解決方案,除了語義問題,可能會滿足大多數用例。我想當時我希望有一個通用的解決方案,因爲我有不同類型的對象可以使用相同的驗證。 – 2013-10-09 15:26:07