ruby-on-rails - Rails 中嵌套属性错误的自定义哈希
问题描述
我有针对用户模型的地址和电话关联,这意味着用户可以有多个地址和多个电话。
在我使用 devise_token_auth gem 的注册时,我必须存储 1 个地址和 1 个电话。
用户.rb
has_many :addresses, dependent: :destroy
has_many :phones, dependent: :destroy
accepts_nested_attributes_for :addresses
accepts_nested_attributes_for :phones
application_controller.rb
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up,
keys: [
:email,
:name,
addresses_attributes: %i[street_1 street_2 city state country zip label default],
phones_attributes: %i[label dial default]
]
)
end
问题
如果我发送的地址和电话属性为空/无效,我将收到如下错误 JSON:
{
"status": "error",
"data": {
...
},
"errors": {
"addresses.label": [
"can't be blank"
],
"addresses.street_1": [
"can't be blank"
],
"addresses.city": [
"can't be blank"
],
"phones.dial": [
"Not a valid 10-digit telephone number"
],
"full_messages": [
"Addresses label can't be blank",
"Addresses street 1 can't be blank",
"Addresses city can't be blank",
"Phones dial Not a valid 10-digit telephone number",
]
}
}
继文章Errors can be indexed with nested attributes in Rails 5 by usingindex_errors: true
之后,我收到错误 JSON 为:
{
"status": "error",
"data": {
...
},
"errors": {
"addresses[0].label": [
"can't be blank"
],
"addresses[0].street_1": [
"can't be blank"
],
"addresses[0].city": [
"can't be blank"
],
"phones[0].dial": [
"Not a valid 10-digit telephone number"
],
"full_messages": [
"Addresses[0] label can't be blank",
"Addresses[0] street 1 can't be blank",
"Addresses[0] city can't be blank",
"Phones[0] dial Not a valid 10-digit telephone number",
]
}
}
我真正需要的是以下内容,我可以轻松地用任何语言遍历:
errors: {
addresses: {
label: ["can't be blank"],
street_1: ["can't be blank"],
...
},
phones: {
dial: ["Not a valid 10-digit telephone number"]
}
}
解决方案
推荐阅读
- chain - 马尔可夫链不收敛
- regex - 正则表达式:在末尾选择字符,但不选择开头
- reactjs - AxiosInstance 没有持久化 mobx
- flutter - sharedp 参考在另一个 Flutter 页面中获取存储的数据
- c# - 从范围内重新爱单例服务的含义是什么
- c++ - 打印出向量数组中的特定长度
- javascript - 混合应用程序 - 是否可以将大型二进制文件上传到 Javascript
- cypress - 如果测试用例通过,如何指示 cypress 执行某些操作?
- java - 我可以在没有局部变量的情况下编写 Iterator.next() 的实现吗(双链表)
- javascript - 条形图未在 D3 堆积条形图中绘制