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

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

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

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

1096閲覧

Sinatra + ActiveRecord + SQLite3で「SQLite3::SQLException: no such table: ideas」

GenkiSugiyama

総合スコア86

Ruby

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Sinatra

Sinatraは、Rubyで作られた オープンソースのWebアプリケーションフレームワークです。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2021/04/10 14:42

編集2021/04/11 00:24

Sinatraを使って簡単なJSONを呼び出したりDBに登録するAPIを作成中です。

マイグレーション等を終わらせ、アプリを立ち上げてブラウザで表示を確認しようとしたところ、表題のエラーが発生しました。

イメージ説明

##エラー発生箇所
下記app.rbIdea.all.to_json

【app.rb】

require 'sinatra' require './sinatra/activerecord' require 'sinatra/reloader' require 'json' require './models/category.rb' require './models/idea.rb' class Category < ActiveRecord::Base validates :name, presence: true end class Idea < ActiveRecord::Base validates :category_id, presence: true validates :body, presence: true end get '/' do Idea.all.to_json end

##関連ファイル
【category.rb】

require './db/database.rb' class Category < ActiveRecord::Base validates :name, presence: true end

【create_categories】(マイグレーションファイル)

class CreateCategories < ActiveRecord::Migration[6.1] def change create_table :categories do |t| t.string :name, null: false t.timestamps end end end

【idea.rb】

require './db/database.rb' class Idea < ActiveRecord::Base validates :category_id, presence: true validates :body, presence: true end

【create_ideas】(マイグレーションファイル)

class CreateIdeas < ActiveRecord::Migration[6.1] def change create_table :ideas do |t| t.references :category, foreign_key: true, null: false t.text :body, null: false t.timestamps end end end

【database.rb】

ActiveRecord::Base.establish_connection( adapter: 'sqlite3', database: 'db/development' ) class Sensor < ActiveRecord::Base; end

テーブルがないというエラーなのでターミナル上でSQLiteのDBに接続し確認しましたが、ターミナル上ではテーブル、レコード共に存在していることが確認できました。

% sqlite3 db/development.sqlite3  SQLite version 3.28.0 2019-04-15 14:49:49  Enter ".help" for usage hints. sqlite> .table  ar_internal_metadata ideas  categories schema_migrations sqlite> select * from categories;  1|Sports|2021-04-10 12:41:12.027917|2021-04-10 12:41:12.027917  2|Study|2021-04-10 12:41:12.031770|2021-04-10 12:41:12.031770 sqlite> select * from ideas;  1|1|badminton|2021-04-10 12:41:12.042066|2021-04-10 12:41:12.042066  2|2|Learn Ruby|2021-04-10 12:41:12.045207|2021-04-10 12:41:12.045207

なぜ表題のようなエラーが発生してしまうのか検討もついていない状態です。
回答のほどよろしくお願いいたします。

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

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

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

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

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

winterboum

2021/04/11 00:02

エラーメッセージを編集しないで。肝心の所伏せ字では、、、
GenkiSugiyama

2021/04/11 00:22

ご指摘ありがとうございます。 伏字の部分は「ideas」となります。
winterboum

2021/04/11 01:52

不思議ですね。。。 実行の環境は何でしょう? 心は、table存在確認したdatabaseと実行時参照されたdatabaeが別物では?
GenkiSugiyama

2021/04/19 05:41

DBとのコネクションの記述方法が間違っていたらしく、sinatra/activerecordのgithubにある設定方法の通りに記述したら問題なく表示できるようになりました。
guest

回答1

0

自己解決

DBとのコネクションがうまく設定できていなかったらしく、sinatra/activerecordのgithub記載の設定方法に直したところ、うまく動くようになりました。(database.ymlを作成し、実行ファイル(app.rb)にset :database_file, "path/to/database.yml"を追記)

【app.rb】

require

1require './sinatra/activerecord' 2require 'sinatra/reloader' 3require 'json' 4require './models/category.rb' 5require './models/idea.rb' 6 7set :database_file, "path/to/database.yml" 8 9class Category < ActiveRecord::Base 10 validates :name, presence: true 11end 12 131415

投稿2021/04/19 05:46

GenkiSugiyama

総合スコア86

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問