문제

Rails에서 Activeresource를 사용하여 별도의 데이터베이스에서 엔티티를 관리하고 있습니다.

현재의 경우 원격 자원의 ID를 명시 적으로 관리하려고 노력해 왔습니다. 현재의 경우 다른 필드를 유지하기보다는 로컬 리소스의 ID를 재사용하는 것이 가장 간단합니다.

불행히도 나는 이것을 코드로 작동 할 수 없었습니다. new? 안에 ActiveResource::Base ~이다

  def new?
    id.nil?
  end

그리고 save ~이다

 def save
   new? ? create : update
 end

따라서 정의상 자원의 ID를 설정하고 새로운 리소스로 저장하는 것은 불가능합니다.

create 그리고 update 보호 된 방법이므로 Activeresource :: Base Code를 해킹하면 아마도 작동하게 될 것입니다.

이 작업을 수행하는 올바른 방법이 있습니까? 아니면 내가 그렇게하려고하는 일은 그냥 나쁘고 그렇게해서는 안됩니까?

도움이 되었습니까?

해결책

당신은 activeresource의 의도에 반대하고 있습니다. Activeresource는 컨벤션에 의해 생성을 할 때 지정된 ID를 반환하는 인터페이스를 제공합니다.

즉, 사용중인 리소스를 제어하고 새 레코드를 저장할 때 ID를 취할 수 있도록 동작을 수정 한 경우 Activeresource :: Base를 수정할 수 있습니다. 철도에있는 사람들이 기본 수업을 추가하고 변경하는 것은 드문 일이 아닙니다. 패치를 lib에 넣고 스타트 업 물건 어딘가에 포함시킵니다.

나는 그것이 좋은 생각이라고 생각하지는 않지만 가능합니다. :)

다른 팁

새로운 레일 (테스트 2.3.2)에서는 저장 로직이 약간 변경되었으므로 (이제 레코드에는 부울 필드 @NewRecord가 해당 ID.nil?)를 설정할 수 있습니다.

record = Model.new
record.id = 123
record.save!
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top