나는 Rails 5.0을 사용 중입니다. 이것이 제대로 작동해야하는지, 아니면 다른 접근 방식을 취해야하는지 잘 모르겠습니다. 나는 procedure has_many Complications가 그렇게 정의 된 procedure와 complication을위한 모델을 가지고 있습니다;accepts_nested_attributes_for에 대한 reject_if 옵션을 사용하여 업데이트하는 동안 하위를 삭제하는 방법
class Procedure < ActiveRecord::Base
has_many :complications, dependent: :destroy
accepts_nested_attributes_for :complications, allow_destroy: true, reject_if: proc{|attr| attr[:name] == 'None'}
end
class Complication < ActiveRecord::Base
belongs_to :procedure
validates :name, presence: true
end
사용자에게 여러 합병증이있는 중첩 된 양식이 제공됩니다. 나는 이것을 동적으로하기 위해 고치 보석을 사용했다. 새 레코드에서 사용자에게 빈 합병증 선택 상자가 표시됩니다. 그들이 비워두면 유효성 검사가 실패합니다. 이것은 그들이 필드를 건너 뛰는 것을 막기 위해 'None'을 선택하게하는 것입니다. 'None'을 선택하면 reject_if
옵션으로 인해 아무런 문제도 발생하지 않습니다. 이 모든 것은 예상대로 정확하게 작동합니다.
문제는 합병증을 선택하면 (예 : '실패') 프로 시저 레코드가 편집되는 경우 발생합니다. 합병증이 '없음'으로 변경되고 기록이 업데이트되면 합병증은 변경되지 않고 그대로 유지됩니다 (즉, '실패'). 필요한 행동으로 인해 합병증이 파괴됩니다.
아마도 reject_if 옵션은 이미 존재하는 업데이트의 레코드를 삭제하는 기능을 수행하지 않습니다. 이 올바른지? 그렇다면 내 사건을 다루기위한 적절한 방법은 무엇인가?
TIA.