質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

843閲覧

Rails apiの値を取得しdb内に保存したい

H.T.

総合スコア5

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/03/07 10:11

Dark sky apiという天気情報が取得できるapiを使用したwebサイトを作っています。したいこととして天気情報を取得し、その値を作成したLocation model内に保存しそこから値を取得しその値をview pageに表示することです
生成したURLからコンソール内にて指定した地域の情報を確認までできたんですが

lib/task内で生成した値を保存しようとするとこのエラーにあたります。

rake aborted! NameError: uninitialized constant Location /Users//Documents//lib/tasks/task_sky.rake:6:in `block (2 levels) in <main>' Caused by: NameError: uninitialized constant Location

どのようにすれば表示までさせる事ができるでしょうか?
よろしくお願いします。
ruby 2.6.5 / Rails 5.2.4.1

lib/tasks

require 'darksky-ruby' namespace :task_sky do desc "get" task :sample do if Location.find(1).present? api = DarkSkyAPI.new(key: ENV['api_sky_key']) api.options = {lang: 'ja'} data = api.forecast(lat: 14.5964879, lon: -120.9095193) manira = Location.find_by(name: "manira") manira.update(summary: data[:currently][:summary],location_time: Time.at(data[:currently][:time])) data = api.forecast(lat: 10.3787569, lon: -123.7762541) cebu = Location.find_by(name: "cebu") cebu.update(summary: data[:currently][:summary],location_time: Time.at(data[:currently][:time])) data = api.forecast(lat: 8.2450404, lon: -123.00923) dapaon = Location.find_by(name: "dapaon") dapaon.update(summary: data[:currently][:summary],location_time: Time.at(data[:currently][:time])) data = api.forecast(lat: 15.1769792, lon: -120.5544492) clark= Location.find_by(name: "clark") clark.update(summary: data[:currently][:summary],location_time: Time.at(data[:currently][:time])) else api = DarkSkyAPI.new(key: ENV['api_sky_key']) api.options = {lang: 'ja'} data = api.forecast(lat: 14.5964879, lon: -120.9095193) manira = Location.create(name: "manira") manira.update(summary: data[:currently][:summary],location_time: Time.at(data[:currently][:time])) data = api.forecast(lat: 10.3787569, lon: -123.7762541) cebu = Location.create(name: "cebu") cebu.update(summary: data[:currently][:summary],location_time: Time.at(data[:currently][:time])) data = api.forecast(lat: 8.2450404, lon: -123.00923) dapaon = Location.create(name: "dapaon") dapaon.update(summary: data[:currently][:summary],location_time: Time.at(data[:currently][:time])) data = api.forecast(lat: 15.1769792, lon: -120.5544492) clark= Location.create(name: "clark") clark.update(summary: data[:currently][:summary],location_time: Time.at(data[:currently][:time])) end end end

schema.rb

ActiveRecord::Schema.define(version: 2020_03_06_070517) do create_table "locations", force: :cascade do |t| t.datetime "current_time" t.string "name" t.string "forecast" t.datetime "created_at", null: false t.datetime "updated_at", null: false end end

view file(変数は仮ですが目的としては取得した値を表示する事です)

<%= link_to 'pages', pages_index_path %> <div class="py-4"> <div class="container py-4"> <div class="row py-4"> <div class="col-mg-3 mx-auto py-2"> <h2 class="text-center text-white">Weather</h2> <div id="weather" style="height: 500px; width: 80%; margin: 2rem auto 0;"> <p class="text-white mx-auto city"> City: <%= @manira.name %> </p> <p class="text-white mx-auto time"> Local Time: <%= @manira.current_time %> </p> <p class="text-white mx-auto weather"> Hourly weather: <%= @manira.forecast %> </p> </div> </div> <div class="col-mg-3 mx-auto py-2"> <h2 class="text-center text-white">Weather</h2> <div id="weather" style="height: 500px; width: 80%; margin: 2rem auto 0;"> <p class="text-white mx-auto"> City: <%= @cebu.name %> </p> <p class="text-white mx-auto"> Local Time: <%= @cebu.current_time %> </p> <p class="text-white mx-auto"> Hourly weather: <%= @cebu.forecast %> </p> </div> </div> <div class="col-mg-3 mx-auto py-2"> <h2 class="text-center text-white">Weather</h2> <div id="weather" style="height: 500px; width: 80%; margin: 2rem auto 0;"> <p class="text-white mx-auto"> City: <%= @clark.name %> </p> <p class="text-white mx-auto"> Local Time: <%= @clark.current_time %> </p> <p class="text-white mx-auto"> Hourly weather: <%= @clark.forecast %> </p> </div> </div> <div class="col-mg-3 mx-auto py-2"> <h2 class="text-center text-white">Weather</h2> <div id="weather" style="height: 500px; width: 80%; margin: 2rem auto 0;"> <p class="text-white mx-auto"> City: <%= @dapaon.name %> </p> <p class="text-white mx-auto"> Local Time: <%= @dapaon.current_time %> </p> <p class="text-white mx-auto"> Hourly weather: <%= @dapaon.forecast %> </p> </div> </div> </div> </div> </div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問