Rails + Angularjs:通过JSON传递user_id

问题描述:

我正在构建一个简单的博客应用程序,使用Rails 4(api)& Angularjs来帮助学习Angularjs。我已经花了2天时间才让我的博文模型与Angularjs进行交流。似乎我已经击中另一堵墙试图将帖子与用户关联(使用Devise)。Rails + Angularjs:通过JSON传递user_id

我知道,当我建立到这个应用程序,我将使用外键&,所以我很乐意听到其他人使用railsangularjs构建SPA。我也尝试将Angularjs设置为尽可能接近模仿Rails。

您如何处理使用Angularjs的关联& Rails?

你如何甚至可以设计助手,如current_user & user_signed_in?在Angularjs模板工作?

预先感谢您。

如果您需要我,我可以添加更多详细信息。我真的不知道去哪里的形式在这里(我在两个轨道& Angularjs一个新手)

你如何甚至可以设计助手,如CURRENT_USER & user_signed_in?在Angularjs模板中工作?

简单的答案是,你没有。关于这个问题可能会有很多哲学争论,但是本质上来说javascript并不安全,因为所有内容都可供用户在浏览器中检查。

如果要将帖子与用户相关联,最好在轨道中的控制器级别执行此操作。使用current_user在您的Post(或任何您想要关联它的方式)上设置user_id字段。

我不在我的Angular应用程序中放置任何'安全'功能。

下面是我如何在我的一个应用程序中将用户组织与旅程关联的示例。

def create 
    @journey = Journey.new(params[:journey]) 
    @journey.organisation = current_user.organisation 
    if @journey.save 
     render json: @journey 
    else 
     head :error 
    end 
end 

哦,也是在你的API :: PostsController,你需要调用before_filter :authenticate_user!能够使用current_user

+0

嗨@muttonlamb。这很好(我可能会坚持使用这种方法),但我很好奇别人有什么要说的,所以我想我会稍微等一会儿,然后再标记这个答案...快速问题:'你会如何处理条件陈述? (例如,如果current_user的id与post.user_id相匹配,则显示编辑链接?Thanks – goo

+0

您可以通过比较用户ID和帖子ID来在控制器上设置一个标志,但是您仍然需要在控制器中验证它,例如'如果current_user.id == post.id [一些代码保存] else [重定向或flash或错误]结束'。所以基本上你只是不显示在角度视图中的选项,但如果一些恶意用户发送一个正确的形成把请求,然后它仍然会被控制器拒绝。希望有帮助! – muttonlamb

这两个库是一个很好的例子:

a RESTful Rails api

此存储库包含一个完整的REST风格的rails-api以及一份干净的文档,可以让开发人员通过所有构建步骤。如果你想从轨道上开始使用ruby,这个仓库对你来说是一个很好的资源。

AngularJS front-end for the above api

这个软件库包含干净的文件,其通过所有施工步骤走开发商沿着一个完整的RESTful AngularJs Web应用程序。如果你想从AngularJs开始,这个仓库对你来说是一个很好的资源。