2017-12-30 22 views
0

레일즈 ActiveRecord는 belongs_to에 대해 optional 옵션을 제공합니다. 외래 키에 null을 허용하고 객체 생성 중에 연관을 null로 설정할 수 있지만 후속 저장 중에 해당 연관을 필요로하는 사용 사례를 고려하십시오. 예를 들어, 새로운 회원에게는 초기 그룹이 없을 수도 있지만, 회원의 추가 업데이트에는 그룹 연결이 필요합니다.ActiveRecord belongs_to 연관에 대한 선택적 조건을 어떻게 선언합니까?

optional 옵션 값 자체를 조건부로 사용할 수 있습니까? 예를 들어,

class Member < ApplicationRecord 
    belongs_to :group, optional: -> { new_record? } 
end 

optional: true과 동일하게 동작합니다, 우리는 optional 옵션은 truthy 값에 대해서만 검사를 분석하는 것을 추론 할 수있다.

사용자 정의 유효성 검사기가이 사용 사례를 충족시키는 실용적인 방법입니까?

답변

1

optional 옵션에 람다를 제공하는 것이 작동하지 않을 것 같습니다 (시도하지는 않았지만). 나는 source code을 보았는데 이것은 optional이 사용 된 방법입니다. 필요한 경우

required = !reflection.options[:optional] 

는 레일 그냥 존재 확인과 같은 추가 : 실제로

class Member < ApplicationRecord 
    belongs_to :group, optional: true 
    validates :group, presence: true, on: :update 
end 
+0

을 :

model.validates_presence_of reflection.name, message: :required 

난 당신이 이런 일에 사용자 정의 경로를 갈 수있다 생각합니다. 소스를 인용 해 주셔서 감사합니다. – ybakos

0

데이터베이스 제약 조건을 설명하지 않고 비즈니스 논리를 설명합니다. 조건을 적용하기 위해 유효성 검사기를 추가하십시오.

validates :group, presence: true, on: :update 

이것은 업데이트시에만 조건을 적용하고 작성하는 것은 아닙니다.