[ruby-on-rails] 레코드가 레일에서 방금 파괴되었는지 확인
그래서
record.new_record?
새로운 것이 있는지 확인하려면
탈출구가 있는지 확인해야합니다.
record = some_magic
record.destroy
record.is_destroyed? # => true
그런 것. 파괴하면 물체가 얼어 붙는다는 걸 알아요. 일종의 작업이지만이 작업에 대한 명시적인 것이 있습니까?
답변
할 수 있습니다.
Record.exists?(record.id)
그러나 그것은 항상 필요하지는 않은 데이터베이스에 히트를 할 것입니다. 내가 아는 유일한 다른 해결책은 theIV가 언급 한대로 콜백을 수행하는 것입니다.
attr_accessor :destroyed
after_destroy :mark_as_destroyed
def mark_as_destroyed
self.destroyed = true
end
그리고 확인하십시오 record.destroyed
.
답변
답변
곧 출시 될 예정입니다. 최신 Riding Rails 게시물에서 다음과 같이 말합니다.
마지막으로 BugMash와 관련이있는 것은 아니지만, José Valim (다른 수십 개의 커밋 중에서 model.destroyed?)을 추가했습니다. 이 멋진 메서드는 현재보고있는 인스턴스가 성공적으로 파괴 된 경우에만 true를 반환합니다.
그래서 당신은 간다. 곧 출시됩니다!
답변
record.destroyed 동안? 잘 작동하고 true 또는 false를 반환합니다. 이것을 조금 건조시키고 컨트롤러에서 destroy를 호출하는 라인에 if 조건을 만들 수도 있습니다.
record = Object.find(params[:id])
if record.destroy
... happy path
else
... sad path
end
이 게시물이 게임에서 조금 늦었다는 것을 깨달으십시오. 그러나 누구든지 이것을 더 논의하고 싶다면, 나는 게임입니다! 참고 : 또한 내 모델에 대한 after_destroy 유효성 검사가 있었고 작동하는 동안 이와 같은 별도의 방법이 과잉처럼 보입니다.)
답변
destroy
객체를 사용하는 것은 freeze
(내가 아는 한) 호출 이외의 다른 것을 반환하지 않으므로 frozen?
최선의 방법 이라고 생각 합니다. 다른 옵션에서 구출하는 것입니다 ActiveRecord::RecordNotFound
당신이 뭔가를 한 경우 record.reload
.
위의 Mike의 전술이 가장 좋을 수도 있고, ‘가정 만들기’를 시작하려면 언급 된 이러한 경우에 대한 래퍼를 작성할 수도 있습니다.
건배.
답변
앱의 논리를 더 많이 알지 못해도 멈춘 것 같습니까? 최선의 방법입니다.
실패하면 콜백에서 트리거하는 모델에 “파괴 된”속성을 추가 할 수 있으며보다 정확한 솔루션을 원할 경우 확인할 수 있습니다.