문제

우리는 사양을 실행할 때 다음과 같은 경고를 계속보고 있습니다.

객체#id는 더 이상 사용되지 않습니다. Object#Object_id를 사용하십시오

문제의 코드는 ActiveRecord 모델의 ID에 액세스하는 것입니다 (Ruby VM의 객체 인스턴스 ID가 아닌 테이블의 속성입니다).

이 특정 경고를 끄는 방법을 알고 있거나 어떻게 든 피하는 방법을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

나는 당신이 조롱 / 스터브를하고 있다고 가정합니다 (사양을 언급했기 때문에).

제 경우에는 ActiveRecord 객체를 스터브하고 ID 속성에 액세스 할 때 이러한 경고가 발생합니다.

ActiveRecord 객체의 ID에 액세스 할 것으로 예상되는 경우 다음을 수행하는 것이 좋습니다.

 mock("MyActiveRecordObject", :id => 1001)

다른 팁

사용해보십시오 [:id] 대신에 .id

물체가 내려 오면 ActiveRecord::Base, 전화 id AR :: B로 간다 id 더 이상 사용되지 않은 방법이 아닌 방법 Object.

그 경고는 일반적으로 내 객체 중 하나가 내가 생각하는 것이 아니라는 것을 의미합니다.

객체는 실제로 AR 객체가 아니며 일반적으로 일부 데이터 검색이 실패했음을 나타냅니다 (Table.find_by_name('nonexistent name') 돌아올 것입니다 nil). 눈에 보이는 경고를 종료하는 것만으로도 꺼질 수 있습니다. whiny_nils 구성에서 그렇지 않으면 an을 수행하십시오 is_a? 객체의 속성에 액세스하기 전에 테스트하고 실패 케이스를 우아하게 처리하십시오.

객체#ID 경고는 Nilclass와 같은 일반 루비 클래스에서만 발생합니다. ActivereCord :: Base Overrides Object#id

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top