2016-09-21 3 views
1

유효성 검사가 완료되면 중첩 모델을 올바르게 저장하는 데 문제가 있습니다. 이것은이 모델의 단일 필드에서만 발생하는 것으로 보입니다.중첩 모델의 필드가 비어있을 때 비어있는 레일이있는 문제

나는 두 가지 모델을 가지고, 수의사

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 

내 컨트롤러 액션이 JSON으로 밖으로 렌더링이처럼 보이는 vet_paramsVeterinarian.create(vet_params)를 호출을 제외한 아무것도하지 않고있다.

{ 
    "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가 전송되는 '생성()'그러나 중첩 된 라이선스가 만료가 비어있을 수 없다는 오류를 던지고 유지합니다. 이는 첫 번째 라이선스 이후의 추가 라이선스에 대해서만 발생합니다. 첫 번째 검사는 유효합니다.

저는이 문제의 원인을 놓치고 있습니다. 나는 전에 이런 일이 일어난 것을 본 적이 없다. 어떤 아이디어라도 크게 감사 할 것입니다.

레일 5 btw입니다.

답변

1

유효 기간이 유효하지 않습니다.

레일 콘솔 시도에서
"1":{ 
    "number":"Test Number", 
    "expiration_date":"09/16/2020", 
    "_destroy":"false" 
}, 

,

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

당신이 오류를 얻을 것이다

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

그러나 기록을 저장하는 동안, 레일이 오류를 건너 뛰는 및 만료가 전무로 설정되고, 유효성 검사를 다음 만료일을 비워 둘 수 없다는 오류가 발생했습니다.

validates :number, :expiration_date, presence: true 

"09/09/2020"부터 "09/16/2020"으로 만료일을 변경하십시오. 코드가 정상적으로 작동합니다.

+0

멋진 캐치! 이 문제가 해결되었습니다. – Mike

관련 문제