0

我正在使用 ActiveResource 从另一个应用程序调用 rails 应用程序。我需要将新对象的 id 提供给第一个应用程序(是的,在此应用程序中创建的控制器知道如何处理接收 id),所以我执行以下操作:

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

但是,它没有执行 POST 来创建新资源,而是 PUT,导致接收应用程序尝试使用 id 1231231 更新资源,这当然不存在(我想创建它!),所以我最终收到因此出现 404 错误。

做一些测试问题似乎在 ActiveResourceModel.new 中?返回 false,而 ActiveResourceModel.exists?也返回 false (太好了,两个应该相反的方法返回相同!)。

4

2 回答 2

2

检查 AResource源和文档,该new?方法检查 id 是否存在并exists?检查远程资源,使两者返回相同。

为什么你需要传递 id 来创建一个新对象?没有意义。无论如何,您可以尝试调用create方法而不是save.

于 2010-02-04T16:43:24.250 回答
1

我有相反的问题。使用 id 调用 AR.create 时,我期望 PUT(因为它暗示记录已经存在)。然而,在 Rails 3.1 及更高版本中,看起来 Rails 3.0 中调用 PUT 的代码现在实际上调用了 POST。任何人都可以确认此更改吗?(因为我可以控制接收服务器,所以我只是调整了 POST 代码,使其具有与旧 PUT 代码相同的行为)。

于 2012-12-18T21:47:07.820 回答