【问题标题】:RubyOnRails Internal API CallRubyOnRails 内部 API 调用
【发布时间】:2020-07-20 23:01:57
【问题描述】:

我对 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

并在 app/controllers/api 下创建了另一个 UsersController

class Api::UsersController < ApplicationController

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

最后我在 app/serializers 下创建了一个序列化器:

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

当我转到我的索引页面时,我收到类似

的错误

找不到资源的序列化程序:#

显然我的序列化程序有问题,但我找不到。

【问题讨论】:

    标签: ruby-on-rails ruby api serialization


    【解决方案1】:

    最好将序列化程序放在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
    

    【讨论】:

    • 感谢重播!我认为这可以解决问题,然后在此之后我得到一个错误,如“NoMethodError(用户:类的未定义方法'model_name')”。我做了一个快速的谷歌搜索并向用户模型添加了一个 ActiveRecord::Base 继承,但现在我收到类似“ActiveRecord::StatementInvalid (Could not find table 'users'):'之类的错误。我没有用户的数据库表,我自己开发了用户类,而不是通过控制台生成它。我不会使用任何数据库事务,我是否必须为使用 API 生成数据库?没有意义。
    • 不,我想你可以避免使用模型和数据库,但在这种情况下我不确定你是否可以使用序列化程序。为什么不简单地接收 json 并按原样显示它呢?在视图模板中处理它的键
    • 是的,我不必使用序列化程序,但我如何才能接收它而不会收到我在问题中提到的“找不到资源的序列化程序:..”错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 2020-11-06
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多