Angular JS ngResource avec imbriqué ressources
J'essaie à angular JS et je veux obtenir des données à partir d'un ensemble de ressources définie dans mon application rails.
J'ai écrit les lignes suivantes:
UserMission = $resource("/users/:user_id/user_missions/:id", {user_id: "@user_id", id: "@id"}, {update: {method: "PUT"}})
$scope.user_missions = UserMission.query()
et j'obtiens l'erreur suivante:
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'
Mon rails routes sont organisés comme suit:
resources :users do
resources :user_missions
end
Je pense que ça vient de moi pas comprendre "@id". Il dit qu'il vient au large de la "objet de données" à partir de la angularjs site et je ne suis pas exactement sûr de ce que cela signifie.
Toute aide serait appréciée merci.
Mise à jour
Une autre question. Je n'ai pas trouvé d'exemples de rails avec angularjs utilisant des ressources (par exemple, l'Utilisateur has_many :missions, through: :user_missions
) avec $resource
. Est-il un bon exemple de angularjs la manipulation imbriquée ressources (avec $resource
) avec ajax?
OriginalL'auteur GTDev | 2013-02-25
Vous devez vous connecter pour publier un commentaire.
Lire ma réponse à votre question précédente, vous devez inclure les valeurs pour les paramètres d'un objet passé en paramètre dans l'appel, j'. e.:
En déclarant votre service paramètres par défaut
{user_id: "@user_id", id: "@id"}
vous êtes en train de dire que, lors de l'appel de service sans paramètres, ils obtiennent des valeurs de l'objet que vous passez dans l'appel. Dans votre cas, vous appelez le service sans paramètres, comme dansUserMission.query()
, mais vous n'êtes pas de passer toute la valeur, le service est appelé avec des valeurs nulles, d'où le serveur est/users/user_missions
qui donne l'erreur. Vous devez inclure des valeurs de paramètres dans l'appel, comme je l'ai indiqué dans ma réponse.OriginalL'auteur remigio
Que je recherchais aussi une façon de gérer les imbriquée ressources avec ngResource. Je ne suis pas familier avec la façon dont les rails de travaux ou de votre ressemble, mais c'est ce que j'avais:
J'avais besoin pour atteindre et saisir les objets imbriqués tableau pour la requête action. À l'aide de la version 1.0 de anguleuses ce n'est pas possible. Cependant, avec la version 1.1 (j'ai testé avec 1.1.3), il est possible de le faire.
Dans mon contrôleur je viens de configuration de la ressource comme ceci:
La clé ici est la
transformResponse
fonction passée en tant que partie de l'action de config. 1.1 supplémentaire de la config des éléments dans l'action config sont transmis dans le$http
config pour la demande. Le$http
service permet à untransformResponse
fonction qui permet de manipuler les données renvoyées par la requête. L'utilisation de cette fonction, que je peux atteindre dans la structure imbriquée et retourner un tableau dont j'ai besoin pour l'action.Une mise en garde à remarquer ici est que le transformResponse fonction reçoit une chaîne de valeur, de sorte que vous devez d'abord analyser les données dans ce qui vous attend. L'autre problème, c'est que vous retournez la finale effective des données de la valeur que vous voulez, PAS une chaîne de caractères. Même si vous recevez une valeur de chaîne, vous devez retourner à la fin de la valeur de données requis.
+1 bon exemple de
transformResponse
.Si vous souhaitez obtenir
num_results
,total_pages
etc dans votre contrôleur, vous pouvez simplement utiliserquery: { method: 'GET', isArray: false }
dans votre ressource, puis utiliserMyModel.query({/*params*/}, function(data) { $scope.numResults = data.num_results; $scope.things = data.objects; });
OriginalL'auteur bpedman
La "objet de données" se réfère à votre
instance
objets ($champ d'application.user_missions est un tableau de ces objets, ou serait plutôt, si vous avez réellement réussi à le récupérer), et vous pouvez penserUserMission
comme étant leclass
.Si vous appelez la méthode de requête sur le
class
objet (UserMission
), dans votre cas, il requiert au moins un paramètre afin de savoir qui de l'UtilisateurUserMission
(s) à récupérer.Ci-dessus serait d'effectuer un "OBTENIR TOUTES"
Pour obtenir un spécifique
UserMission
( "OBTENIR UN" ), vous devrez fournir à la fois les IdentifiantsSens?
OriginalL'auteur holographic-principle