使用 Angular $resource 时如何将对象包裹在我的数据周围

How to wrap an object around my data when using Angular $resource

我有一个简单的 angular 服务,returns 一个 $resource。假设它看起来像这样:

$resource '/users/:id/:options.json', {id: '@id', options: '@options'},
            create_user: {
                method: 'POST'
            }

现在在我的控制器中,我通过创建用户服务的新实例来使用此资源:

user = new UserService()
                user.name = $scope.user.name
                user.email = $scope.user.email
                user.password = $scope.user.password
                user.password_confirmation = $scope.user.password_confirmation
                user.$create_user()

但是当执行到最后一行时,数据发送了但是不在对象中。

现在我让 Devise 管理我的用户帐户并查看他们的注册控制器,他们似乎希望我将数据发送到一个名为:sign_up.

的对象中

我如何在 $resource 中描述我希望我的数据封装在我的自定义对象中?

编辑:这是服务器得到的。它对此不满意并说每个值都丢失了。

Parameters: {"name"=>"foo", "email"=>"foo@bar.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "registration"=>{"name"=>"foo", "email"=>"foo@bar.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}

EDIT2:使用 .erb 注册的工作服务器日志:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"xMEDtMWf72yuTwbkaq21c0ZKynoBSWnSypXfm+xJYvNph1d4iKqLIBwwe0DSA3I/YCU+pAHDd23ylc4y7ximEQ==", "user"=>{"name"=>"lol", "email"=>"lol@lol.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}

这应该有效:

var User = $resource(
     '/users/:id/:options.json', {id: '@id', options: '@options'},
     create_user: {
         method: 'POST'
     }
);

User.create_user({user: $scope.user});

我建议在该路线上使用 transformRequest。您的代码看起来像这样。

$resource('/users/:id/:options.json',
          {id: '@id', options: '@options'},
          {
              create_user: {
                  method: 'POST', 
                  transformRequest: function(data, headers) {
                      return angular.toJson({
                          user: data
                      });
                  }
              }
          });

这允许您更改发送的数据。传递给 transformRequest 的数据 object 是您的用户 object。 headers 已经包含 Content-Type application/json,因此您无需在此处添加。