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

标签 ruby-on-rails angularjs devise angular-resource

我有一个简单的 angular.service ,它返回一个$resource。可以说它看起来像这样:

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

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

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 管理我的用户帐户并查看他们的注册 Controller ,他们似乎希望我在名为 sign_up 的对象中发送数据。

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

编辑:这是服务器得到的。它对此并不满意,并表示缺少所有值。

Parameters: {"name"=>"foo", "email"=>"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7a1c15153a181b0854191517" rel="noreferrer noopener nofollow">[email protected]</a>", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "registration"=>{"name"=>"foo", "email"=>"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0c6a63634c6e6d7e226f6361" rel="noreferrer noopener nofollow">[email protected]</a>", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}

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

Parameters: {"utf8"=>"✓", "authenticity_token"=>"xMEDtMWf72yuTwbkaq21c0ZKynoBSWnSypXfm+xJYvNph1d4iKqLIBwwe0DSA3I/YCU+pAHDd23ylc4y7ximEQ==", "user"=>{"name"=>"lol", "email"=>"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ef838083af838083c18c8082" rel="noreferrer noopener nofollow">[email protected]</a>", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}

最佳答案

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

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

这允许您更改正在发送的数据。传递给transformRequest 的数据对象是您的User 对象。 header 已经具有 Content-Type application/json,因此您无需在此处添加它。

关于ruby-on-rails - 使用 Angular $resource 时如何将对象包裹在我的数据周围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31123190/

相关文章:

javascript - Rails+javascript - 上传前的图片预览

ruby-on-rails - 是否使用模型作为资源?

javascript - Turbolinks 加载事件不适用于页面刷新

jquery - 带有 Rails 的 format.js

javascript - AngularJS:我可以使用过滤器在 ng-repeat 中分块数组吗?

angularjs - *** process.env.ENV未定义,假设env为 'prod'

ruby-on-rails - 如何使用 Devise 在登录页面中捕获表单错误

javascript - 使用 jQuery 的 angularjs 应用程序中的路由错误

ruby-on-rails - 如何允许其他用户使用已使用但未确认的电子邮件进行注册?

ruby-on-rails - 设计未定义的方法 'registration_path'