質問編集履歴

2 /app/controllers/last_prices_controller.rbの内容追記

Analgesic

Analgesic score 6

2018/06/26 17:08  投稿

Railsアプリ内に自作ファイルを入れて実行しようとするとクラスメソッドのエラーが出てしまう
### 前提・実現したいこと
Ruby on Rails で作ったアプリに、bitflyerのビットコイン価格を1分おきに取得してくる機能をつけたいと考えています。価格を取ってくるプログラムファイル(trading.rb)を作り、Ruby on Rails で作ったアプリのフォルダに入れてから実行したところ、
> uninitialized constant LastPrice (NameError)
というクラスメソッドのエラーが出てしまいます。
初心者ゆえ、何か根本的な勘違いをしてるかもしれませんが、ご教授いただけると幸いです。
### 発生している問題・エラーメッセージ
```
Traceback (most recent call last):
trading.rb:5:in `<main>': uninitialized constant LastPrice (NameError)
```
### 該当のソースコード
trading.rb
```ruby
require 'net/http'
require 'uri'
require 'json'
@btcprice = LastPrice.new(id: 1, pair_code: 1, pair_name: "Bitcoin-JPY")
@btcprice.save
loop do
uri = URI.parse("https://api.bitflyer.jp/v1/getticker")
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
response = https.get uri.request_uri
@btcprice = LastPrice.find(1)
@btcprice.bitflyer = JSON.parse(response.body)["ltp"]
@btcprice.save
sleep(60)
end
```
/app/controllers/last_prices_controller.rb  
```  
class LastPricesController < ApplicationController  
 
   def index  
   end  
 
   def create  
       @btcpr = LastPrice.new(id: 1, pair_code: 1, pair_name: "Bitcoin-JPY")  
       @btcpr.save  
       redirect_to("/last_prices")  
   end  
     
end  
```  
### 試したこと
LastPriceのメソッドを使用しなければ、ビットコイン価格を取得して表示するなどのことは問題なくできるので、bitflyerのAPIうんぬんは関係なさそうです。またRailsアプリ内の.html.erbファイルなどでLastPriceメソッドを使用すると問題なく動くので、LastPriceメソッド自体は定義できているようです。
### 補足情報(FW/ツールのバージョンなど)
bitflyerのAPIに関するページ
https://lightning.bitflyer.jp/docs/playground
https://lightning.bitflyer.jp/docs#socket.io-2.0-websocket
  • Ruby

    9442 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    8863 questions

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

1 タイトル変更

Analgesic

Analgesic score 6

2018/06/26 06:03  投稿

クラスメソッドのエラーが出てしまう
Railsアプリ内に自作ファイルを入れて実行しようとするとクラスメソッドのエラーが出てしまう
### 前提・実現したいこと
Ruby on Rails で作ったアプリに、bitflyerのビットコイン価格を1分おきに取得してくる機能をつけたいと考えています。価格を取ってくるプログラムファイル(trading.rb)を作り、Ruby on Rails で作ったアプリのフォルダに入れてから実行したところ、
> uninitialized constant LastPrice (NameError)
というクラスメソッドのエラーが出てしまいます。
初心者ゆえ、何か根本的な勘違いをしてるかもしれませんが、ご教授いただけると幸いです。
### 発生している問題・エラーメッセージ
```
Traceback (most recent call last):
trading.rb:5:in `<main>': uninitialized constant LastPrice (NameError)
```
### 該当のソースコード
trading.rb
```ruby
require 'net/http'
require 'uri'
require 'json'
@btcprice = LastPrice.new(id: 1, pair_code: 1, pair_name: "Bitcoin-JPY")
@btcprice.save
loop do
uri = URI.parse("https://api.bitflyer.jp/v1/getticker")
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
response = https.get uri.request_uri
@btcprice = LastPrice.find(1)
@btcprice.bitflyer = JSON.parse(response.body)["ltp"]
@btcprice.save
sleep(60)
end
```
### 試したこと
LastPriceのメソッドを使用しなければ、ビットコイン価格を取得して表示するなどのことは問題なくできるので、bitflyerのAPIうんぬんは関係なさそうです。またRailsアプリ内の.html.erbファイルなどでLastPriceメソッドを使用すると問題なく動くので、LastPriceメソッド自体は定義できているようです。
### 補足情報(FW/ツールのバージョンなど)
bitflyerのAPIに関するページ
https://lightning.bitflyer.jp/docs/playground
https://lightning.bitflyer.jp/docs#socket.io-2.0-websocket
  • Ruby

    9442 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    8863 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る