Access Devise:来自Angular的user_id?

时间:2013-06-25 04:43:11

标签: ruby-on-rails ruby angularjs devise

在我的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是什么。我该怎么做呢?我一整天都在努力,我很绝望。

1 个答案:

答案 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请求以获取价值。我想不出这种方法的任何缺点。