rails表示嵌套模型的字段是空白的问题

时间:2016-09-21 17:48:59

标签: ruby-on-rails ruby-on-rails-5

我遇到了一个问题,即在验证时让嵌套模型正确保存。这似乎只发生在这个模型中的单个字段中。

我有两个模特,一个兽医

class Veterinarian < ApplicationRecord
  has_many :licenses
  accepts_nested_attributes_for :licenses, allow_destroy: true, reject_if: :all_blank
end

和许可证

class License < ApplicationRecord
  belongs_to :veterinarian
  validates :number, :expiration_date, presence: true
end

我的控制器操作除了使用Veterinarian.create(vet_params)调用vet_params看起来像是以JSON呈现之外什么也没做。

{  
  "zip_code":"",
  "title":"",
  "bio":"",
  "photo":"",
  "licenses_attributes":{  
    "0":{  
      "number":"6436436446",
      "expiration_date":"09/06/2018",
      "_destroy":"false"
    },
    "1":{  
      "number":"Test Number",
      "expiration_date":"09/16/2020",
      "_destroy":"false"
    },
    "2":{  
      "number":"test 2",
      "expiration_date":"09/30/2016",
      "_destroy":"false"
    }
  }
}

正确的params被发送到'create()'但是使用嵌套许可证时它会一直抛出错误,说expiration_date不能为空。只有在第一个许可证之后的其他许可证才会发生这种情况。第一个验证就好了。

我对导致这种情况的原因感到茫然。我以前从未见过这种情况。任何想法都将不胜感激。

这是Rails 5顺便说一句。

1 个答案:

答案 0 :(得分:1)

您的失效日期无效。

"1":{  
  "number":"Test Number",
  "expiration_date":"09/16/2020",
  "_destroy":"false"
},

在rails控制台中尝试,

date = Date.parse("09/16/2020")

您将收到错误

ArgumentError: invalid date
from (irb):20:in `parse'
from (irb):20

但是在保存记录时,rails正在跳过此错误,并且expiration_date设置为nil,并且在验证之后会出现错误,表示到期日期不能为空。

validates :number, :expiration_date, presence: true

将过期日期从“09/16/2020”更改为“09/09/2020”。您的代码可以正常工作。