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

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

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

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

SQLite

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

Sinatra

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

Q&A

解決済

2回答

2752閲覧

【至急】Sinatraでのデータベース接続エラーの解消法

it-bamboo

総合スコア10

Ruby

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

SQLite

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

Sinatra

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

0グッド

0クリップ

投稿2015/08/13 10:33

【至急】Sinatra でのデータベース接続の問題について

わけあってこのプログラムは本日23時までに完成されければなりません!!
よろしくお願いします!!!!!

こんにちは。

現在 Ruby の勉強がてら、Sinatra というフレームワークを使用して簡単な会員登録型TODOサービスを制作しているのですが、その中でデータベースの接続をしようとすると
「Internal Server Error
undefined method `join' for #String:0x000000...
というエラーに見舞われてしまいました...
サーバーの再起動など色々と試みてみたのですが、全く解決策が見えないため、質問させていただきます。
以下が各コードになります。もし不足している物があれば補足しますので、よろしくお願いします。

[ マイグレショーンファイル ]

Ruby

1class CreateItems < ActiveRecord::Migration 2 def change 3 create_table :todo do |t| 4 t.integer :userid 5 t.string :title 6 t.string :detail 7 t.datetime :dl 8 t.timestamps null: false 9 end 10 create_table :users do |t| 11 t.string :name 12 t.string :loginid 13 t.string :password 14 t.timestamps null: false 15 end 16 end 17end

※ マイグレーションには成功しており、データベースのテーブル構築には成功しています。

「スキーマ」

Ruby

1ActiveRecord::Schema.define(version: 20150813013659) do 2 3 create_table "todo", force: :cascade do |t| 4 t.integer "userid" 5 t.string "title" 6 t.string "detail" 7 t.datetime "dl" 8 t.datetime "created_at", null: false 9 t.datetime "updated_at", null: false 10 end 11 12 create_table "users", force: :cascade do |t| 13 t.string "loginid" 14 t.string "password" 15 t.datetime "created_at", null: false 16 t.datetime "updated_at", null: false 17 t.string "name" 18 end 19 20end

「app.rb」
(ログイン機能はなんとか実装したので省略します。必要があればご連絡ください。)

Ruby

1require 'bundler/setup' 2Bundler.require 3require 'sinatra/reloader' if development? 4require 'open-uri' 5require "sinatra/json" 6 7require 'date' 8 9require 'sinatra' 10require 'sinatra/activerecord' 11 12require 'sinatra/cookies' 13 14require './models/todo.rb' # 下にコードを 15require './models/users.rb' # 掲載しています 16 17Time.zone = "Tokyo" 18ActiveRecord::Base.default_timezone = :local 19 20class Server < Sinatra::Base 21end 22 23enable :sessions 24set :session_secret, "ランダムな英数字32文字" 25 26# メイン画面 27get '/home' do 28 if session[:user_id] != nil 29 # ログイン成功 30 31 @user = Users.where(:id => session[:user_id]).first 32 33 @todo = Todo.where(:id => session[:user_id]) # ☆おそらくこのコードに問題があります... 34 35 erb :home 36 else 37 redirect '/' # ログイン画面へ 38 end 39 40end

・モデルたち
「./models/user.rb」

Ruby

1ActiveRecord::Base.establish_connection(ENV['DATABASE_URL']||"sqlite3:db/development.db") 2class Users < ActiveRecord::Base 3 validates :loginid, uniqueness: true 4 has_many :todo 5end

「./models/todo.rb」

Ruby

1ActiveRecord::Base.establish_connection(ENV['DATABASE_URL']||"sqlite3:db/development.db") 2class Todo < ActiveRecord::Base 3 belongs_to :users 4end 5

個人的にはTodoモデルが正常に動作していないような気がします...
どなたか解決策をお教えください...

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

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

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

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

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

guest

回答2

0

ベストアンサー

時間過ぎてますが、一応。

まず、リレーションのIDを格納するカラム名がおかしそう
t.integer "userid"
ではなく
t.integer "user_id"
では?

次に、どういう実装を考えているのかわかりかねるので、もしかすると外しているかもしれませんが

Ruby

1@user = Users.where(:id => session[:user_id]).first 2@todo = Todo.where(:id => session[:user_id]) # ☆おそらくこのコードに問題があります. 3# こうでは? 4@user = User.find(session[:user_id]) 5@todo = @user.todo 6# もしくは 7@todo = Todo.where(user_id: session[:user_id]).all

そもそも、has_manyでtodoだと単数形なので、has_many :todosでは?

投稿2015/08/13 16:24

rifuch

総合スコア1901

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

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

0

以下のサイトに記述されている問題でしょうか?
Sinatraでundefined method join for stringが出る

投稿2015/08/13 11:29

eripong

総合スコア1546

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問