我有一張擁有has_many照片的相冊。 counter_cache安裝程序更新專輯表中的photos_count列。我如何限制專輯的照片數量?has_many association中的對象數量限制
回答
如何將自定義驗證方法添加到Photo模型?
LIMIT = 50
validate_on_create do |record|
record.validate_quota
end
def validate_quota
return unless self.album
if self.album.photos(:reload).count >= LIMIT
errors.add(:base, :exceeded_quota)
end
end
謝謝@Marcel Jackwerth!花一些時間在'rails console'檢查所有3個解決方案,發現你的是唯一真正阻止創建「不想要的孩子」)) –
使用驗證掛鉤:
class Album
has_many :photos
validate_on_create :photos_count_within_bounds
private
def photos_count_within_bounds
return if photos.blank?
errors.add("Too many photos") if photos.size > 10
end
end
class Photo
belongs_to :album
validates_associated :album
end
感謝您的建議傢伙。我有Marcel的代碼工作。 – chief
photos.size是一個更好的方式去 - http://blog.hasmanythrough.com/2008/2/27/count-length-size,從一個類似的問題 - http://stackoverflow.com/a/4836927/ 1396904 – andorov
按照您的建議修正@andorov – hurikhan77
對我來說,這是足夠使用validates_length_of
:
class Album
has_many :photos
validates_length_of :photos, maximum: 10
end
class Photo
belongs_to :album
validates_associated :album
end
這是最乾淨的解決方案 – fernandohur
可以證實這一點非常好。唯一的問題是,如果你走另一條路,並開始創建一堆屬於專輯的「照片」,就不能說了。您需要爲belongs_to添加:validate => true,儘管我沒有測試過以確保它始終按照預期工作。 – rovermicrover
根據http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to實際上'belongs_to:album,validate:true'檢查父保存上的關聯,而不是子保存。 ..所以你可以添加儘可能多的孩子,這可能是一個問題 –
- 1. Rails4無法用has_many-association保存對象
- 2. FactoryGirl has_many association
- 3. ruby驗證:基於時間限制一個對象的對象數量(has_many)
- 4. 限制加載對象的數量
- 5. Mongoid:限制嵌入對象的數量
- 6. 限制在has_many中返回的對象數
- 7. rails has_one of has_many association
- 8. Rails testing has_many association failure
- 9. Mongoid has_many association and factorygirl
- 10. has_many association表令人困惑
- 11. Mongoid:渴望加載計數has_many association
- 12. 限制在NetSuite中返回的發票對象的數量
- 13. 驗證rails中創建的has_many對象的數量3.2
- 14. :在收集(的has_many協會)找到行的數量限制
- 15. graph.facebook.com/me/likes中返回對象的數量限制是多少?
- 16. 基於LINQ中子列表的數量限制對象
- 17. 如何限制NSFetchResultsController中的對象數量?
- 18. 如何限制ArrayList中的對象數量
- 19. Java - 限制掃描器對象中令牌的數量?
- 20. 可以填入對象參數的內容數量的限制
- 21. 從限制類對象實例的數量給定的數字
- 22. 限制對S3中對象的訪問
- 23. Elasticsearch限制返回的嵌套對象的數量
- 24. SilverStripe - 限制一個數據對象可以有多個關係的數量
- 25. Yii:限制HAS_MANY關係
- 26. 我如何限制實例化對象的數量?
- 27. 你被允許進行XMLHTTP請求對象的數量限制?
- 28. 限制刪除全部到一定數量的對象
- 29. 限制對象的旋轉?
- 30. has_many,belongs_to association has_many關聯模型在belongs_to中有兩個別名fk associated_model
檢查計數插入之前? –
可能不是最可愛的,但最安全的是@Marcel Jackwerth sulution,其他使用'validates_associated'的人可以讓你用'parent.children.create'創建無限制的孩子! –