레코드가 레일에서 방금 파괴되었는지 확인


83

그래서

record.new_record?

새로운 것이 있는지 확인하려면

탈출구가 있는지 확인해야합니다.

record = some_magic
record.destroy
record.is_destroyed? # => true

그런 것. 파괴하면 물체가 얼어 붙는다는 걸 알아요. 일종의 작업이지만이 작업에 대한 명시적인 것이 있습니까?

답변:


50

할 수 있습니다.

Record.exists?(record.id)

그러나 그것은 항상 필요하지는 않은 데이터베이스에 히트를 할 것입니다. 내가 아는 유일한 다른 해결책은 theIV가 언급 한대로 콜백을 수행하는 것입니다.

attr_accessor :destroyed
after_destroy :mark_as_destroyed
def mark_as_destroyed
  self.destroyed = true
end

그리고 확인하십시오 record.destroyed.


2
여기에 몇 가지 맥락이 도움이된다고 생각합니다. 객체가 파괴되었는지 알고 싶은 이유에 따라 다릅니다. 단위 테스트의 일부로 수행하는 경우 데이터베이스에 대한 추가 적중이 좋습니다. 앱의 일부로 수행하는 경우 두 번째 경로로 이동하는 것이 더 나은 방법 일 수 있습니다.
jerhinesmith

69
이것은 더 이상 필요, 사용object.destroyed?

2
Rails 4에 DEPRECATION WARNING: You are passing an instance of ActiveRecord::Base to 존재합니까? . Please pass the id of the object by calling .id.
Minqi Pan

5
Record.exists?삭제 된 레코드를 다시로드 할 수 없기 때문에 컨트롤러 사양에 여전히 필요합니다 destroyed?. 하지만 확인하는 인스턴스 변수가 있다면 assings, 그때 사용할 수 있습니다 destroyed?.
denis.peplin

@Daniel Huckstep, 당신이 아직 살아 있다면, 올바른 대답에 대한 대답을 변경하십시오!
다니엘


11

곧 출시 될 예정입니다. 최신 Riding Rails 게시물에서 다음과 같이 말합니다.

마지막으로 BugMash와 관련이있는 것은 아니지만, José Valim (다른 수십 개의 커밋 중에서 model.destroyed?)을 추가했습니다. 이 멋진 메서드는 현재보고있는 인스턴스가 성공적으로 파괴 된 경우에만 true를 반환합니다.

그래서 당신은 간다. 곧 출시됩니다!


6

record.destroyed 동안? 잘 작동하고 true 또는 false를 반환합니다. 이것을 조금 건조시키고 컨트롤러에서 destroy를 호출하는 라인에 if 조건을 만들 수도 있습니다.

record = Object.find(params[:id])
if record.destroy
  ... happy path
else
  ... sad path
end

이 게시물이 게임에서 조금 늦었다는 것을 깨달으십시오. 그러나 누구든지 이것을 더 논의하고 싶다면, 나는 게임입니다! 참고 : 또한 내 모델에 대한 after_destroy 유효성 검사가 있었고 작동하는 동안 이와 같은 별도의 방법이 과잉처럼 보입니다.)


5

destroy객체를 사용하는 것은 freeze(내가 아는 한) 호출 이외의 다른 것을 반환하지 않으므로 frozen?최선의 방법 이라고 생각 합니다. 다른 옵션에서 구출하는 것입니다 ActiveRecord::RecordNotFound당신이 뭔가를 한 경우 record.reload.

위의 Mike의 전술이 가장 좋을 수도 있고, '가정 만들기'를 시작하려면 언급 된 이러한 경우에 대한 래퍼를 작성할 수도 있습니다.

건배.


지금은 얼어 붙었는지 확인 만했는데, 다른 목적으로 물건을 싣고 얼릴 수 있고, 그러면 거짓말 이겠죠 ... 현재 상황에서 얼어? 잘 작동하지만 장기적으로 의존하고 싶지 않습니다.
Daniel Huckstep 2009-08-23

0

앱의 논리를 더 많이 알지 못해도 멈춘 것 같습니까? 최선의 방법입니다.

실패하면 콜백에서 트리거하는 모델에 "파괴 된"속성을 추가 할 수 있으며보다 정확한 솔루션을 원할 경우 확인할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.