我有一个简单的 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/