我有一个在前端使用AngularJS的Rails应用程序。我还有一个格式为“/ api /:user_id / submissions /:id”的路由来访问用户的特定提交。在前端,我想显示当前登录的Devise用户的每个帖子,只显示他们的帖子。我创建了一个Angular工厂:
var brainDB = angular.module('brainDB',['ngResource']).factory('userSubmission', function($resource){
var service = $resource('/api/:user_id/submissions/:id', {user_id: '@user'}, {id: '@id'} );
return service;
让它限制在我的控制器上:
brainDB.controller('SubmissionsCtrl',['$scope', 'Submission', 'userSubmission',
function($scope, Submission, userSubmission){
$scope.submissions = Submission.query();
$scope.userSubmissions = userSubmission.query();
}]);
唯一的问题是顶部的工厂不起作用。我可以在我的数据库中输出每个提交,但我不知道如何告诉Angular current_user的user_id是什么。我有一个submissions.rb控制器,其动作成功地从我的路线中提取特定用户的所有帖子,“/ api /:user_id / submissions /”,但就像我说我不知道如何告诉Angular什么是current_user.id是因为current_user只能从Rails访问。
我一直试图解决这个问题一个星期,并且没有通过Google搜索获得太多帮助。非常感谢任何建议。
答案 0 :(得分:0)
我自己的应用程序有另一个服务器端点调用defaults
&角度服务Metadata
在角度.run()
块中初始化。此块将currentUser
对象拉回(使用其他元数据)以初始化$rootScope
个变量。从那里,我可以在我的角度控制器中调用其他角度服务:userSubmission.query({user_id: $rootScope.currentUser.id});
等。
另一种选择是在javascript文件中生成包含所有元数据的元数据内容(即metadata.js.erb
,您可以在其中填充变量(使用<%= =>
),这些变量可用于整个角度应用。
希望有所帮助。