15

私はAngularJSを試していますが、Railsアプリケーションで定義されたネストされたリソースからデータを取得したいと考えています。

私は次の行を書きました:

UserMission = $resource("/users/:user_id/user_missions/:id", {user_id: "@user_id", id: "@id"}, {update: {method: "PUT"}})
$scope.user_missions = UserMission.query()

次のエラーが発生します。

  Processing by UsersController#show as JSON
  Parameters: {"id"=>"user_missions"}
  User Load (0.6ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 1]]
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", "user_missions"]]
Completed 404 Not Found in 10ms

ActiveRecord::RecordNotFound (Couldn't find User with id=user_missions):
  app/controllers/users_controller.rb:100:in `current_resource'
  app/controllers/application_controller.rb:34:in `authorize'

私のrailsルートは次のように構成されています。

resources :users do
  resources :user_missions
end

「@id」がわからないのが原因だと思います。それはangularjsサイトの「データオブジェクト」から外れていると言っていますが、それが何を意味するのか正確にはわかりません。

どんな助けでもありがたいです。

アップデート

別の質問。has_many :missions, through: :user_missionsネストされたリソース(Userの例)を使用したangularjsを使用したrailsの例は見つかりませんでした$resource$resourceネストされたリソース(を使用して)をajaxで操作するangularjsの良い例はありますか?

4

3 に答える 3

16

前の質問に対する私の回答を読んでください。呼び出しでパラメーターとして渡すオブジェクトの両方のパラメーターの値を含める必要があります。つまり、次のようになります。

$scope.user_missions = UserMission.query({user_id: some_value, id: some_other_value});
于 2013-02-25T07:15:46.003 に答える
10

また、ngResourceを使用してネストされたリソースを処理する方法も探していました。レールがどのように機能するか、またはデータがどのように見えるかについてはよくわかりませんが、これは私が持っていたものです。

{"num_results": 5, "objects": [....], "page": 1, "total_pages": 1}

クエリアクションのために、ネストされたオブジェクトの配列にアクセスして取得する必要がありました。角度の1.0バージョンを使用すると、これは不可能です。ただし、1.1バージョン(1.1.3でテスト)では、これを行うことができます。

私のコントローラーでは、次のようにリソースを設定します。

$scope.MyModel = $resource("/api/mymodel/:id",
    {},
    {'query': {method: 'GET', isArray: true, "transformResponse": function (data) {
        return JSON.parse(data).objects;
    }}});

ここで重要なtransformResponseのは、アクション構成の一部として渡される関数です。$http1.1では、アクション構成内の追加の構成項目は、要求の構成に渡されます。この$httpサービスではtransformResponse、リクエストによって返されたデータを操作できる関数を使用できます。この関数を使用して、ネストされた構造に到達し、アクションに必要な配列を返すことができます。

ここで注意すべき点の1つは、transformResponse関数が文字列値を受け取るため、最初にデータを解析して期待どおりのものにする必要があることです。もう1つの注意点は、文字列ではなく、必要な実際の最終データ値を返すことです。文字列値を受け取ったとしても、必要な終了データ値を返す必要があります。

于 2013-03-03T05:32:18.513 に答える
3

「データオブジェクト」はオブジェクトを指しinstance($ scope.user_missionsはそれらのオブジェクトの配列です。実際に正常に取得できた場合はそうなります)、と考えることができUserMissionますclass

classオブジェクト( )でqueryメソッドを呼び出す場合、この場合、取得するUserMissionユーザーを知るために少なくとも1つのパラメーターが必要です。UserMission

UserMission.query({user_id: <USER_ID>});

上記は「GETALL」を実行します

UserMission特定の( " GET ONE ")を取得するには、両方のIDを指定する必要があります

UserMission.query({user_id: <USER_ID>, id: <MISSION_ID>});

意味がありますか?

于 2013-03-03T15:23:43.397 に答える