如何使用Angular.js使用Rails RABL API?

时间:2014-07-11 21:40:31

标签: angularjs ruby-on-rails-4 rabl

我正在使用RABL构建rails应用程序,该应用程序在由Active Admin控制的数据上生成API。它是一个非常简单的API,但我还没有太多数据,但我对Angular.js和客户端应用程序更新。使用rabl,我在2个对象上创建了一个API。到目前为止,这是我的代码;

project.rb

class Project < ActiveRecord::Base

   has_attached_file :image, :styles => { :small => "100x100", :medium => "200x200", :large => "300x300" }, 
              :url  => "/system/members/:id/:style/:basename.:extension", 
              :path => ":rails_root/public/system/members/:id/:style/:basename.:extension"
   validates_attachment :image, content_type: { content_type:     ["image/jpg", "image/jpeg", "image/png"] }

end

projects_controller.rb

class ProjectsController < ApplicationController

def index
    @projects = Project.all

    respond_to do |format|
        format.json { render }
    end
end

视图/项目/ index.html.rabl

collection @projects
attributes :id, :title, :short_description, :long_description, :client, :image

member.rb

class Member < ActiveRecord::Base

  has_one :image

  has_attached_file :image, :styles => { :small => "100x100", :medium => "200x200", :large => "300x300" }, 
              :url  => "/system/members/:id/:style/:basename.:extension", 
              :path => ":rails_root/public/system/members/:id/:style/:basename.:extension"
  validates_attachment :image, content_type: { content_type:     ["image/jpg", "image/jpeg", "image/png"] }

end

members_controller.rb

class MembersController < ApplicationController

    def index
       @members = Member.all

        respond_to do |format|
           format.json { render }
        end
     end

  end

视图/构件/ index.html.rabl

collection @members
attributes :id, :name, :title, :bio, :facebook, :twitter, :instagram, :linkedin, :dribbble, :image

角;

应用/资产/ Javascript角/ app.js

var app = angular.module("onyx", ["ngResource"]);

app.factory("Member", [ //member for the member object
  "$resource", function($resource) {
    return $resource("/member/:name", {  //trying to just start by getting the name
      name: "@name"
    }, {
      update: {
        method: "GET"
      }
    });
  }
]);

更新 感谢this精彩的教程,我把一切都搞定了。

2 个答案:

答案 0 :(得分:3)

你可以使用restmod,一个非常棒的角色ORM。

“Restmod会创建可在Angular中使用的对象,以便与RESTful API进行交互。”

首先你需要安装它。在github,它得到了很好的解释。

然后,您可以定义模型。例如:

module.factory('Project', function($restmod) {
   return $restmod.model('/projects');
});

然后,您可以在控制器/服务/等上注入Project模型并将其用作以下

$scope.projects = Project.$search();

在您的观点中,您可以执行以下操作:

<pre>{{projects | json }}</pre>

查看结果。

使用restmod,您可以:

  • 创建模型和关系
  • 执行CRUD操作
  • 搜索和过滤馆藏
  • 在模型上创建自定义方法,混合和钩子。

所有问题都在github pagedocumentation page

上得到了很好的解释

答案 1 :(得分:0)

我已经制作了几个带有角度和轨道的应用程序。制作应用后,请在所有数据上生成API。一旦你这样做,Angular会处理剩下的事情。在我看来,使用gem并不是最好的,你可以通过CDN使用angular来使用rails资产管道。

我找到的最好的资源是学习如何让rails和angular一起玩得很好,这两个教程是:

  1. http://coderberry.me/blog/2013/04/22/angularjs-on-rails-4-part-1/(2部分)
  2. http://angular-rails.com(完整的应用漫游+部署和TDD)