0

在我的 Rails 应用程序中,我正在使用 AngularJS,并希望显示与 :current_user; 关联的网站的所有提交。我用设计。

这是我的工厂:

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

4

1 回答 1

0

构建页面时,您已经拥有会话范围。我们通过简单地将会话 id 传递给视图布局中的应用程序级 JavaScript 变量来完成类似的操作,在我们的例子中,我们使用HAML. 像下面这样的东西在ng-app开始之前在头块中。

globalAppCtx = {}
globalAppCtx['user'] = JSON.parse("#{escape_javascript session[:user].to_json}");

在上面的代码中,session[:user]是带有用户文字的 ruby​​ 会话,其中包含ng-app. 在其他地方,在 Angular 代码或 JavaScript 的其他地方,您可以参考globalAppCtx['user']

IMO 这应该不会很昂贵,并且可以为您节省AJAX获得价值的请求。我想不出这种方法有什么缺点。

于 2013-06-25T05:31:53.910 回答