-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.rb
More file actions
121 lines (103 loc) · 3.51 KB
/
app.rb
File metadata and controls
121 lines (103 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
require 'sinatra'
require 'sinatra/reloader'
require 'sinatra/cookies'
require 'pry'
require "fileutils"
require 'pg'
enable :sessions
client = PG::connect(
:host => "localhost",
:user => ENV.fetch("USER", "codebase"), :password => 'pass',
:dbname => "myapp")
# トップページ
get "/top_page" do
@top_page = "一問Webアプリケーション"
erb :top_page
end
# 新規登録
get '/signup' do
@app_name = "一問Webアプリケーション"
erb :signup
end
# 新規登録ポスト
post '/signup' do
name = params[:name]
email = params[:email]
password = params[:password]
# データの挿入↓
client.exec_params("INSERT INTO users (name, email, password) VALUES ($1, $2, $3)", [name, email, password])
user = client.exec_params("SELECT * from users WHERE email =$1 AND password = $2", [email, password]).to_a.first
session[:user] = user
redirect '/mypage'
end
# ログインページ
get "/login" do
@app_name = "一問一答Webアプリケーション"
erb :login
end
# ログインポスト
post "/login" do
email = params[:email]
password = params[:password]
user = client.exec_params("SELECT * FROM users WHERE email ='#{email}' AND password = '#{password}'").to_a.first
if user.nil?
return erb :login
else
session[:user] = user
redirect '/mypage'
end
end
# ログアウト
delete '/signout' do
session[:user] = nil
redirect '/login'
end
# マイページ
get "/mypage" do
@name = session[:user]['name']
@img = client.exec_params("SELECT content FROM picture WHERE user_id = $1 order by id desc", [session[:user]["id"]]).to_a.first
erb :mypage
end
# マイページポスト
post "/mypage" do
@name = session[:user]['name'] # 書き換える
if !params[:img].nil? # データがあれば処理を続行する
tempfile = params[:img][:tempfile] # ファイルがアップロードされた場所
save_to = "./public/image/#{params[:img][:filename]}" #ファイルを保存したい場所
FileUtils.mv(tempfile, save_to)
img = params[:img][:filename]
# データの挿入↓
client.exec_params("INSERT INTO picture (user_id, content) VALUES ($1, $2)", [session[:user]["id"], img])
end
redirect '/mypage'
end
# 問題ページ
get "/question/:page" do
@question_id = params[:page].to_i
@question = client.exec_params("select question from q_and_a2 where id = '#{@question_id}'").first["question"]
erb :question
end
# 質問の回答をポストに送る&答えを表示するページ
post "/answer/:page" do
@question_id = params[:page].to_i
@ans = params[:answer]
@answer = client.exec_params("select answer from q_and_a2 where id = '#{@question_id}'").first["answer"]
@explanation = client.exec_params("select explanation from q_and_a2 where id = '#{@question_id}'").first["explanation"]
# score変数を用意し、最初はまだ問題に答えていないので0点を代入する。
if @question_id == 1
session[:user]['score'] = 0
end
score = 0
# もし、自分の答えが正解であれば、スコアを1点追加する。
if @ans == @answer
score += 1
end
# session[:user] にハッシュで{score=>"score"}を代入する。@scoreにsession[:user]['score']を代入することで点数を表示することができる。
session[:user]['score'] += score
@score = session[:user]['score']
erb :answer
end
get '/result' do
@total_score = session[:user]['score']
erb :result
end