javascript - 如何将 Rails current_user 传递给 AngularJS 工厂 API 调用?

标签 javascript ruby-on-rails angularjs factory

在我的 Rails 应用程序中,我有用户,他们可以创建与其帐户相关联的帖子。我有一条路线,"/api/:user_id/submissions/:id(.:format)"=> "submissions#usersubmission"如果 id 与关联的用户匹配,它将成功显示用户帖子。

我现在要做的是在前端通过 AngularJS 显示用户的帖子。我不确定如何将 :user_id 传递给 API 调用。这是我的观点:

<div id="submission-list-container">
                <ul id="indexSubmissions">
                        <li ng-repeat="submission in userSubmissions">
                        <a href="/submissions/{{submission.id}}"><h3 id="submissionh3">{{submission.title}} <small>{{submissionPreview(submission.content)}}</small></h3></a>
                        <h1>{{submission.user.email}}</h1>
                        <a id="edit_button" href="/submissions/{{submission.id}}/edit">Edit</a>
                    </li>
                </ul>
            </div>

这是我的工厂,用于此调用:

BrainDB.factory('userSubmission', function($resource) {
var service = $resource('/api/:user_id/submissions/:id', {user_id: '@user_id'}, {id: '@id'} );

return service;

});

以及被调用的 Controller 操作:

def usersubmission
    @user = User.find(params[:user_id])
    @submissions = @user.submissions 
    @submission = @submissions.find(params[:id])
    render json: @submission 

end

“BrainDB”Angular Controller 只是 .query() 的 userSubmission 工厂。在“userSubmission”工厂中,我不确定如何与 :user_id 建立关联,以便它成功返回 JSON 中所有用户的帖子。有什么建议吗?

最佳答案

绝不应从客户端发送用户。你不应该永远信任客户。

您的 Rails 应用程序应该有一个 session ,并且您应该将当前用户存储在 session 中的某个位置。 ( session 是一个散列,如果您手动进行,只需使用一个合理的 key 来存储当前用户的 ID)。您在登录时执行此操作,然后再检索它。

class ApplicationController < ActionController::Base

  attr_accessor :current_user

  before_filter :load_current_user

  # ...

  private

  def load_current_user
    self.current_user = User.find(session[:user_id])
  end

end

在你的 Controller 中:

def usersubmission
  @submissions = current_user.submissions 
  @submission = @submissions.find(params[:id])
  render json: @submission 
end

如果您使用 Devise 或类似工具,无论如何都会容易得多,因为这些类型的库已经在 Controller 中注入(inject)了 current_user(或类似命名的方法)。

关于javascript - 如何将 Rails current_user 传递给 AngularJS 工厂 API 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17284924/

相关文章:

javascript - 添加新路由时出现错误,路由配置中需要路径

javascript - Mongoose 从远程服务器获取外部数据

javascript - 添加加载图形jquery

ruby-on-rails - Ruby On Rails : example of file_field on form_for

unit-testing - 单元测试 AngularJS 服务

javascript - AngularJS - Uncaught ReferenceError : a is not defined

javascript - HTML5 验证和自定义自动对焦位置

ruby-on-rails - Ruby on Rails 5 - Turbolink 3 无法正常工作

ruby-on-rails - 在关联扩展中访问代理所有者的正确方法

angularjs - Kendo Grid 字段可编辑 :false not working with complex model