2015-01-05 2 views
2

Я занимаюсь исследованием взаимодействия с базой данных и хранением информации о базе данных. В настоящее время я работаю над проектом для своего класса программирования, и я пытаюсь создать страницу регистрации. В данный момент в моем файле signup.html форма принимает два входа: имя пользователя и пароль. Затем после отправки он отправляется в почтовый метод root в мой файл app.rb. Теперь в этом файле app.rb в корне /sources (который является моим почтовым методом root для формы в моем signup.html файле) У меня есть так, что введенные учетные данные сохраняются в моей базе данных. Теперь Я хочу сделать так, чтобы база данных перекрещивалась, чтобы убедиться, что у кого-то нет того же имени пользователя, что и только что введенное. Другими словами, невозможно зарегистрировать, если имя пользователя уже выполнено. Если имя пользователя принято, я хочу, чтобы появилось сообщение о том, что пользователю необходимо ввести новое желаемое имя пользователя. Если имя пользователя не было принято, я хочу, чтобы он перенаправлял файл home.html, который я создал. Я провел исследование и выяснил, что способ сделать это - использовать SELECT column_name FROM table_name. Но я не понимаю, куда положить этот код. Является ли это под моим корнем /sources в моем файле app.rb?Как использовать метод «select * FROM» для баз данных Sequel?

Любая помощь очень ценится. Вот мой код:

В моем signup.html файле:

<p>Please fill out the information below to sign up.</p> 

<form action = "/sources" method="post"> 
    Username: <input type="text" name ="username" placeholder="Username"></br> 
    Password: <input type="password" name ="password" placeholder="Password"></br> 
    <input type="submit" value="Submit"> 
</form> 

В моем app.rb файле:

require 'sinatra' 
require 'sequel' 
require 'rubygems' 
require 'simple-rss' 
require 'open-uri' 

DB = Sequel.connect('sqlite://test.db') 

get '/chart' do 
    DB.create_table(:db) do 
    primary_key :id 
    String :username 
    String :password 
    end 
    #I realize this is not a professional way of creating the database 
    # but I'm not looking for how to change this at the moment 

end 

post '/sources' do 
    @username = params[:username] 
    @password = params[:password] 

    @items = DB[:db] 

    @items.insert(:username => @username, :password => @password) 

end 

get '/signup' do 
    redirect 'signup.html' 
end 

ответ

0

Если вы делали это профессионально, вы бы разделить приложение на слои. Внутри маршрутов вы будете на бизнес-или логическом уровне, а затем передадите запросы данных на уровень базы данных. Слой базы данных, скорее всего, будет обрабатываться и ORM (например, Sequel, Datamapper или ActiveRecord и т. Д.), И там вы будете запрашивать базу данных, обрабатывать создание нового пользователя и т. Д., А затем отчитываться на логическом уровне, который мог бы принять решение относительно того, к какому маршруту и ​​информации нужно направлять пользователя.

Посмотрите на Sequel documentation on models и создать User модель, которая обрабатывает эти вещи, а затем возвращает либо User экземпляр или (вероятно) nil, что-то вроде этого. В модели вам понадобятся такие методы, как self.exists?.

Вы действительно должны переместить этот оператор создания таблицы из маршрута, и если вы не собираетесь использовать migrations (подсказка: вы должны это сделать так же быстро), вы можете добавить метод DB.table_exists?.

A unique constraint на колонке с именем пользователя, вероятно, тоже хорошая идея.

Смежные вопросы