在我的Rails应用程序中,我正在使用AngularJS,并希望显示与该网站关联的所有提交内容:current_user;我用Devise。
这是我的工厂:
var brainDB = angular.module('brainDB',['ngResource']).factory('userSubmission', function($resource){
var service = $resource('/api/:user_id/submissions/:id', {user_id: '@user_id'}, {id: '@id'} );
return service;
});
我的角度控制器:
brainDB.controller('SubmissionsCtrl',['$scope', 'Submission', 'userSubmission',
function($scope, Submission, userSubmission){
$scope.submissions = Submission.query();
$scope.userSubmissions = userSubmission.query();
}]);
这是来自我的提交控制器的相关代码:
def usersubmission
@submissions = current_user.submissions
@submission = @submissions.find(params[:id])
render json: @submission
end
我已经设置了一个路由,“/ api /:user_id / submissions /:id”,如果您在浏览器中使用有效的user_id访问它,它就可以正常工作。但是,我不知道如何告诉Angular current_user.id是什么。我该怎么做呢?我一整天都在努力,我很绝望。
答案 0 :(得分:0)
构建页面时,您将拥有会话范围。我们通过简单地将会话ID传递给视图布局中的应用程序级JavaScript变量来完成类似的操作,在我们的示例中,我们使用HAML
。在ng-app
开始之前在头部区域中出现类似下面的内容。
globalAppCtx = {}
globalAppCtx['user'] = JSON.parse("#{escape_javascript session[:user].to_json}");
在上面的代码中,session[:user]
是包含ng-app
中所需的相关哈希的用户文字的ruby会话。否则,在角度代码或JavaScript中的其他地方,您可以参考globalAppCtx['user']
IMO这不应该非常昂贵,并为您节省AJAX
请求以获取价值。我想不出这种方法的任何缺点。