Это путь, который я выбрал, чтобы заполнить базу данных Rails данными, проанализированными из внешнего запроса $http, и представить их через Angular на внешнем интерфейсе…

Я использую данные с data.colorado.gov для заполнения базы данных альтернативных заправочных станций Колорадо (https://dev.socrata.com/foundry/data.colorado.gov/c7ve-fkni)

// РЕЛЬСЫ

Сначала создайте задачу rake для получения данных:

rails g task import_stations

Затем создайте задачу rake для извлечения и анализа данных, а затем создайте объекты Rails с данными:

/lib/tasks/importstations.rake
 
 require ‘net/http’
 
 namespace :import do
    desc “import fuel station database”
    task :stations => :environment do
       uri = URI.parse(
          ‘https://data.colorado.gov/resource/c7ve-fkni.json'
       )
       res = Net::HTTP.get(uri)
       response = JSON.parse(res)
       response.each do |r|
          Station.create(
             ev_connector_types: r[‘ev_connector_types’],
             fuel_type_code: r[“fuel_type_code”], 
             name: r[“station_name”], 
             street_address: r[“street_address”], 
             phone: r[“station_phone”], 
             hours: r[“access_days_time”], 
             station_id: r[“id”], 
             city: r[“city”], 
             state: r[“state”], 
             zip: r[“zip”]
          )
       end
    end
 end

В моем StationsController у меня есть метод создания:

/app/controllers/stationscontroller.rb
 
 def create
    @station = Station.new(station_params)
    if @station.save
       render json: @station, 
         status: :created,
         location: @station
    else
       render json: @station.errors, 
          status: :unprocessable_entity
    end
 end
 
 private
 
 def station_params
    params.require(:station).permit(
       :id, :fuel_type_code, :name, :street_address, :phone, :hours,
       :station_id, :city, :state, :zip, :ev_connector_types
    )
 end

Я сериализую данные с помощью ActiveModel:Serializer

/app/serializers/stationserializer.rb
 
 class StationSerializer < ActiveModel::Serializer
    attributes :id, :fuel_type_code, :name, :street_address, :phone,
      :hours, :station_id, :city, :state, :zip, :ev_connector_types
 end

Теперь данные json доступны для просмотра по адресу

http://localhost:3000/stations.json

Расширение JSONview для Chrome, если у вас его еще нет, делает данные JSON действительно красивыми и читабельными.

//УГЛОВОЙ

Сначала я установил свой маршрут/состояние в модуле:

/app/assets/javascripts/app.js
 
 angular
    .module(‘app’, [‘ui.router’, ‘templates’, ‘Devise’])
    .config(function($stateProvider, $urlRouterProvider) {
       $stateProvider
          .state(‘stations’, {
             url: ‘/stations’,
             templateUrl: ‘stations/stations.html’,
             controller: ‘StationController as vm’,
          }) 
     })

Затем создайте службу, которая будет получать данные json, которые я хочу показать:

/app/assets/javascripts/app/services/StationService.js
 
 function StationService($http) {
    this.getStations = function () {
       return $http.get(‘/stations.json’)
    }
 }
 
 angular
    .module(‘app’)
    .service(‘StationService’, StationService);

Затем я использую службу в своем контроллере:

/app/assets/javascripts/app/controllers/StationController.js
function StationController($scope, StationService){
   StationService
      .getStations()
      .then(function (res) {
         $scope.stationList = res.data;
   })
}
angular
   .module(‘app’)
   .controller(‘StationController’, StationController);

И, наконец, на мой взгляд, я вывожу данные:

/app/assets/javascripts/app/stations/stations.html
<div ng-controller=”StationController”>
    <table>
       <th>City</th>
       <th>Name</th>
       <th>Phone #</th>
       <th>Address</th>
       <th>Business Hours</th>
       <th>EV Connector Types</th>
       <th>Fuel Type</th>
       <tr ng-repeat=”station in stationList”>
          <td>{{station.city}}</td>
          <td>{{station.name}}</a></td>
          <td>{{station.phone}}</td>
          <td>{{station.street_address}}</td>
          <td>{{station.hours}}</td>
          <td>{{station.ev_connector_types}}</td>
          <td>{{station.fuel_type_code}}</td>
       </tr>
    </table>
 </div>

было сложно понять, но это отличный способ узнать, как рельсы и angular могут работать вместе, используя внешние ресурсы!