RubyOnRails внутренний вызов API - PullRequest
0 голосов
/ 08 апреля 2020

Я совершенно новичок в RubyOnRails, поэтому, пожалуйста, будьте осторожны даже с простейшими ошибками, которые я мог сделать. Я разработал простое приложение, которое отображает некоторые данные из файла .csv. Вот мой код:

class UsersController < ApplicationController

 def index
  @users = getUsers
 end

 private def getUsers
  invoker = ProviderInvoker.new(UserProvider.new("app/data/user_data.csv"))
  invoker.getData
 end
end

Мое приложение отображает данные, как я хотел. Пока проблем нет, но я хочу создать и использовать внутренний API для предоставления данных, поэтому я изменяю свой UsersController на это:

require "net/http"

class UsersController < ApplicationController

 def index
   uri = URI("http://localhost:3000/api/users")
   response = Net::HTTP.get(uri)
   @users = JSON.parse(response)
 end
end

и создал другой UsersController в app / controllers / api

class Api::UsersController < ApplicationController

 def index
  invoker = ProviderInvoker.new(UserProvider.new("app/data/user_data.csv"))
  data = invoker.getData
  render json: data 
 end
end

И, наконец, я создал сериализатор в приложении / сериализаторах:

class UsersSerializer < ActiveModel::Serializer
  attributes :id, :first_name, :last_name, :email, :user_name
end

Когда я go на своей странице индекса, я получаю сообщение об ошибке типа

Сериализатор не найден для ресурса: # <пользователь: 0x07aaebb0 @ id = "1", @ first_name = "Susan", @ last_name = "Gomez", @email = "sgomez0@cpanel. net", @ user_name = "sgomez0">

Очевидно, что что-то не так с моим сериализатором, но я не могу найти что.

1 Ответ

0 голосов
/ 08 апреля 2020

Хорошей практикой является также использование сериализатора в модуле Api, чтобы не было путаницы, какой сериализатор вы используете. В качестве попытки вы можете установить сериализатор вручную в контроллере, например так:

 def index
  invoker = ProviderInvoker.new(UserProvider.new("app/data/user_data.csv"))
  data = invoker.getData
  render json: data, each_serializer: UsersSerializer, adapter: :json
 end
...