Может ли ActiveResource POST создать вместо PUTTing, когда указан идентификатор? - PullRequest
0 голосов
/ 04 февраля 2010

Я вызываю приложение rails из другого приложения, используя ActiveResource. Мне нужно предоставить идентификатор нового объекта первому приложению (да, контроллер create в этом приложении знает, как обрабатывать получение идентификатора), поэтому я делаю что-то вроде этого:

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

Однако вместо того, чтобы делать POST для создания нового ресурса, он помещает его, заставляя получающее приложение попытаться обновить ресурс с идентификатором 1231231, который, конечно, не существует (я хочу его создать!), Поэтому я в итоге получаю ошибку 404 из-за этого.

В некотором тестировании проблема, кажется, в ActiveResourceModel.new? который возвращает false, в то время как ActiveResourceModel.exists? тоже возвращает false (отлично, два метода, которые должны быть противоположными, возвращают одно и то же!).

Ответы [ 2 ]

2 голосов
/ 04 февраля 2010

Проверка источника AResource и документации , метод new? проверяет наличие идентификатора и проверка exists? для удаленного ресурса, в результате чего оба возвращаются одинаково.

Почему именно вам нужно передать идентификатор для создания нового объекта? Не имеет смысла В любом случае, вы можете попробовать вызвать метод create вместо save.

1 голос
/ 19 декабря 2012

У меня противоположная проблема. Я ожидаю PUT при вызове AR.create с идентификатором (поскольку это означает, что запись уже существует). Однако, с Rails 3.1 и выше, кажется, что тот же код в Rails 3.0, который теперь называется PUT, на самом деле вызывает POST. Кто-нибудь может подтвердить это изменение? (Поскольку у меня есть контроль над принимающим сервером, я просто изменил код POST так, чтобы он действовал так же, как мой старый код PUT).

...