2010-02-04 1 views
0

ActiveResource를 사용하여 다른 레일 앱을 호출하고 있습니다. 나는 (이 응용 프로그램은 ID를 수신 처리하는 방법을 알고에 예, 컨트롤러가 생성) 첫 번째 응용 프로그램에 새 개체의 ID를 제공해야합니다, 그래서 나는 같은 것을 할 : 그러나ID를 지정하면 PUT하는 대신 ActiveResource POST를 생성 할 수 있습니까?

a = ActiveResourceModel.new(:id => 1231231, :name => "test") 
a.save 

을 대신하고 POST로 인해 새로운 리소스가 생성되어 수신하는 앱이 ID 1231231로 리소스를 업데이트하려고 시도합니다. 물론 존재하지 않습니다 (생성하려고합니다!). 때문에 404 오류가 발생합니다. 이.

몇 가지 테스트를하고 있는데 문제가 ActiveResourceModel.new에있는 것 같습니다. false를 돌려주는 동안, ActiveResourceModel.exists? 역시 false를 반환합니다. (대단한데, 반대되는 것으로 생각되는 두 가지 메소드는 똑같이 반환합니다!).

답변

2

source and documentation을 검사하면 new? 메서드는 ID와 exists? 원격 리소스 검사가 있는지 확인하여 둘 다 동일하게 반환합니다.

정확히 왜 새 객체를 만들려면 id를 전달해야합니까? 말이되지 않습니다. 어쨌든 save 대신 create 방법으로 전화를 시도 할 수 있습니다.

+0

추가하는 것을 잊어 버렸습니다. 생성하는 것은 new + save와 같습니다. id thing ... 내가 만드는 엔티티는 두 앱에서 동일하며 동기화해야합니다. 각 응용 프로그램의 ID 간 매핑을 사용하는 대신 uuids를 ID로 사용하고 주위를 전달하는 것이 더 쉬울 것이라고 결정했습니다. – diegogs

+0

create는 자원을 직접 게시하려고 시도합니다. http://github.com/rails/rails/blob/master/activeresource/lib/active_resource/base.rb#L1327 imho와 같은 복제는 피해야합니다. 공통 데이터를 중심으로하는 세 번째 앱은 덜 문제가 될 수 있습니다. – Lucas

1

나는 그 반대의 문제가 있습니다. 나는 id를 가진 AR.create를 호출 할 때 PUT을 기대한다 (레코드가 이미 존재 함을 의미하기 때문에). 그러나 Rails 3.1 이상에서는 Pails를 호출하는 Rails 3.0의 코드가 실제로 POST를 호출하는 것처럼 보입니다. 누구든지이 변경을 확인할 수 있습니까? (수신 서버를 제어 할 수 있으므로 POST 코드를 기존 PUT 코드와 동일한 동작으로 조정했습니다.)

+0

의심 스럽다면 소스 코드를 확인하십시오. 3.0에서는 수표를 새로 만드시겠습니까? id.nil이 보이는지 살펴 봅니다. 3.1 이상에서는 새로운?,하지만 지금은 새로운 체크? 객체가 지속되었는지 확인합니다 (이는 id가 정의되어 있는지 확인하는 것과 다릅니다). 그래서, 원래의 질문자에게, 당신은 당신이 찾고있는 행동을 취할 것입니다 (비록 꽤 늦었습니다) ... –