0

ActiveResource を使用して別のアプリから Rails アプリを呼び出しています。新しいオブジェクトの ID を最初のアプリに提供する必要があるため (このアプリのコントローラー create は、ID の受信を処理する方法を知っています)、次のようにします。

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

ただし、POST を実行して新しいリソースを作成する代わりに PUT を実行すると、受信アプリは ID 1231231 のリソースを更新しようとしますが、これはもちろん存在しません (作成したい!)。これによる 404 エラー。

ActiveResourceModel.new に問題があるように思われるいくつかのテストを行っていますか? ActiveResourceModel.exists 中に false を返すものは? false も返します (2 つのメソッドが正反対であるはずなのに、同じ結果が返されます!)。

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 に答える