관련 모델이 2 개이므로이를 검증하고 함께 만들어야합니다. 그것이 가능했던 경우관련 모델 유효성 확인 및 저장
응용 프로그램
class Application < ActiveRecord::Base
has_many :application_sessions, inverse_of: :application
ApplicationsSession
class ApplicationSession < ActiveRecord::Base
belongs_to :application, inverse_of: :application_sessions
나는 LIK 것 전자는
ApplicationSession
을 통해Application
을 만들지 만application_session.build_application
은 유효한 레코드가 아니기 때문에 작동하지 않습니다.application_session.create_application
ApplicationSession
이 유효한 레코드가 아니더라도Application
이 생성됩니다.
첫 번째 경우; Application
및 ApplicationSession
의 유효성을 검사합니다. 이 논리는 Application
이 유효한 레코드 인 경우에만 ApplicationSession
에 대한 application_id
유효성 검사를 건너 뛰면 정상적으로 작동합니다. 아직도 나는 더 우아한 해결책을 사용하는 것을 선호한다.
두 번째 것; ApplicationSession
이 유효한 레코드가 아니지만 나중에이 솔루션이 마음에 들지 않으면 나중에 Application
을 삭제할 수 있습니다.
Rails와 함께 이러한 종속 레코드를 만들거나 만들지 않는 가장 좋은 방법은 무엇입니까?
명확한 설명 : 존재 부모 및 (유효 그것이 어떤이없는 기대 을 저장에 대한 올바른 자녀가없는 상태
간단히, 내가 함께 생성 될 수있는 부모와 자식을 원하는 부모). 하위 레코드가 유효한 레코드가 아닌 경우에는 아무것도 만들어야하지 않습니다.
존재 : 당신이 해고 업 당신의
rails console
명령을 터미널에서, 당신은 같은 것을 볼 것입니다 필수이다. 것은이다; 부모는 처음 생성 된 자식이 유효한 경우에만 존재해야합니다. 따라서 부모를 만들기 전에 자녀를 확인해야합니다. 만약에 가능하다면. 하지만 부모님이 없으면 아이는 항상 잘못된 기록이 될 수 있기 때문에 그렇게 할 수는 없습니다. –
어떤 경우에 ... 거래를 사용하십시오 :) 아이가 유효하지 않은 경우 롤백하십시오. – Ghoti
트랜잭션이 작동했지만 아마도 이런 종류의 문제에 대한 최상의 솔루션이 아닙니다. 게다가 컨트롤러가 복잡해졌습니다. 첫 번째 솔루션을 구현하고 테스트 결과 코드가 잘 수행되고 코드가 읽기 쉽다고 말합니다. 더 단순하고 비 해킹 된 솔루션이 있다면 여전히 행복 할 것입니다. –