ruby-on-rails - 在 rails 中为哈希参数数组编写验证
问题描述
我有一个新的 API 属性,它是一个哈希数组,我想将其作为内置 rails 验证的一部分进行验证。由于这是一个复杂的对象,我正在验证我没有找到任何有效的示例可供参考。
参数名称是books
哈希数组,每个哈希具有三个属性genre
,它们应该是三个可能值的枚举,authors
应该是整数数组,bookId
应该是整数。
像这样的书:[{bookId: 4, genre: "crime", authors: [2, 3, 4]}]
如果它类似于数组,我可以在这里看到它的文档https://guides.rubyonrails.org/active_record_validations.html但我没有找到上述场景的任何示例。
我正在使用带有 ruby 2.3.7 的 rails 4.2.1,如果你能帮助我从某个地方开始,那就太好了。
具体来说,枚举验证我确实在这里找到了一个很好的答案如何验证数组字段的成员?. 问题是当我需要在哈希数组中使用它时。
解决方案
您可以自己编写一个简单的自定义验证方法。这样的事情可能是一个好的开始:
validate :format_of_books_array
def format_of_books_array
unless books.is_a?(Array) && books.all? { |b| b.is_a?(Hash) }
errors.add(:books, "is not an array of hashes")
return
end
errors.add(:books, "not all bookIds are integers") unless books.all? { |b| b[:bookId].is_a?(Integer) }
errors.add(:books, "includes invalid genres") unless books.all? { |b| b[:genre].in?(%w[crime romance thriller fantasy]) }
errors.add(:books, "includes invalid author array") unless books.all? { |b| b[:authors].is_a?(Array) && b[:authors].all? { |a| a.is_a?(Integer) } }
end
推荐阅读
- python - 如何将 JSON 转换为自定义类的实例?
- r - 如何并排比较零膨胀负二项式回归输出,有和没有聚集错误
- r - Pivot_longer in r 用于具有多个值的多个列
- r - 创建一个循环,将 DF 中的一行中的特定值删除到列表中
- paypal - 区分 PayPal Adaptive 和 PayPal Payments Standard 中使用的支付模式
- c++ - 如何专门化具有迭代器特征的函数模板?
- javascript - 检索 http.ServerResponse 正文
- javascript - 重构nodejs进行维护的问题
- python - 如何使所有批次共享一层(批次大小为1)?
- python - 过滤不在列表中的熊猫数据框列名