我正在构建一个简单的应用程序来从开放的 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/