ruby-on-rails - "NoMethodError Table doesn' t存在于禁用PostGres的Rails 5中

标签 ruby-on-rails postgresql

我正在构建一个简单的应用程序来从开放的 nasa api 中提取一个 json 对象。

这是我的模型:

class Apod < ApplicationRecord
  def get_apod_info
    apod_url = "https://api.nasa.gov/planetary/apod?api_key=#{ENV['NASA_API_KEY']}"
    response = Net::HTTP.get(URI(apod_url))
    JSON.parse(response)
  end
end

这是我的 Controller :

class ApodController < ApplicationController
  def index
    @apod_info = Apod.get_apod_info
  end
end

当我尝试在浏览器中加载 View 时,底部出现以下错误。

我有一个数据库(我运行 db:create),但我没有使用它,所以我没有模式也没有迁移。不过这个错误好像和数据库有关?

我尝试了不同的方法(甚至使用模型创建迁移并运行它),但我无法修复它。我在网上找到的类似错误消息似乎是由与我不同的条件触发的。

有什么想法吗?谢谢!

Processing by ApodController#index as HTML
Completed 500 Internal Server Error in 16ms (ActiveRecord: 0.0ms)


NoMethodError (undefined method `get_apod_info' for Apod(Table doesn't exist):Class):

app/controllers/apod_controller.rb:3:in `index'
  Rendering /Users/aaa/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
  Rendering /Users/aaa/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
  Rendered /Users/aaa/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (5.1ms)
  Rendering /Users/aaa/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered /Users/aaa/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.4ms)
  Rendering /Users/aaa/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /Users/aaa/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/actionpack-5.0.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (0.8ms)

最佳答案

如果 Apod 不是数据库支持的模型,那么尝试使用一个普通的旧 ruby​​ 对象,例如(是的,这应该是一个类方法,而不是实例方法):

class Apod
  def self.get_apod_info
    apod_url = "https://api.nasa.gov/planetary/apod?api_key=#{ENV['NASA_API_KEY']}"
    response = Net::HTTP.get(URI(apod_url))
    JSON.parse(response)
  end
end

就我个人而言,我喜欢这种风格:

class Apod
  class << self

    def get_apod_info
      apod_url = "https://api.nasa.gov/planetary/apod?api_key=#{ENV['NASA_API_KEY']}"
      response = Net::HTTP.get(URI(apod_url))
      JSON.parse(response)
    end

  end
end

但是,这是一个品味问题,我知道有些人不喜欢它。

关于ruby-on-rails - "NoMethodError Table doesn' t存在于禁用PostGres的Rails 5中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42409074/

相关文章:

json - 将 Json-in-TEXT 列转换为真正的 JSONB 列

arrays - 错误 : array value must start with "{" or dimension information

postgresql - 如何在 docker 中恢复 postgres?

ruby-on-rails - ActiveRecord 数组计数

ruby-on-rails - 为什么在 Rails 应用程序中呈现和重定向不会停止执行?

ruby-on-rails - 如何处理 Rails 中的散列嵌套键验​​证?

json - 查询 Postgres 9.3 JSON 以检查数组是否包含字符串?

mysql - 更新 3 列连接表时出错

ruby-on-rails - 如何优化ruby中Two_sum代码的解决方案

regexp_replace 替换字符串的错误部分