Sequel Sinatra Post 数据库参数
Sequel Sinatra Post Database params
我正在尝试构建一个非常简单的表格来为我的婚礼登记参加者。这有点像草稿,因为我不知道我会使用 Sinatra 还是 Rails。我将设置预定的电子邮件,以通知客人和我自己婚礼的细节。
所以不管怎样,这是我无法使用插入语法将任何内容持久保存到数据库的代码。省略了一些代码。这仅与 POST 问题有关。
require "sinatra"
require "sequel"
require "sqlite3"
DB = Sequel.connect('sqlite://pauley_wedding.db')
DB.create_table! :attendees do
primary_key :id
string :fname
string :lname
string :phone
string :email
end
@attendees = DB[:attendees]
这里是 routes/views:
get '/' do
erb :index, :layout => :layout
end
get '/about' do
erb :about, :layout => :layout
end
get '/rsvp' do
erb :rsvp, :layout => :layout
end
post '/rsvp' do
@attendees.insert(:fname => params[:fname], :lname => params[:lname], :phone =>
params[:phone], :email => params[:email])
redirect '/confirm_rsvp'
end
get '/confirm_rsvp' do
erb :confirmation, :layout => :layout
end
get '/admin' do
erb :admin, :layout => :layout
@attendees
end
@@rsvp
<style>
h1 {
color: tan;
}
.lead {
color: tan;
}
</style>
<h1><p class="lead">Sign up!</p></h1>
<form action="/rsvp" method="POST">
<p class="lead">First Name:</p><br /><input type="text" name="fname"><br /><br />
<p class="lead">Last Name:</p><br /><input type="text" name="lname"><br /> <br />
<p class="lead">Phone Number:</p><br /><input type="text" name="phone"><br /><br />
<p class="lead">Email Address:</p><br /><input type="text" name="email">
<hr />
<button class="btn btn-primary" input type="submit">Sign Up!</button>
</form>
看起来好像第一个代码块中的 @attendees
与第二个代码块中的 @attendees
相同。在第一个代码块中,@attendees
设置在似乎是顶级代码的地方。在第二个代码块中,@attendees
在路由中使用,这将是您正在使用的 Sinatra class 的一个实例。您可以尝试使用 ATTENDEES
(常量)而不是实例变量。您还可以添加数据库记录器 require 'logger'; DB.loggers << Logger.new($stdout)
以查看 SQL Sequel 正在向数据库发送什么。
我正在尝试构建一个非常简单的表格来为我的婚礼登记参加者。这有点像草稿,因为我不知道我会使用 Sinatra 还是 Rails。我将设置预定的电子邮件,以通知客人和我自己婚礼的细节。
所以不管怎样,这是我无法使用插入语法将任何内容持久保存到数据库的代码。省略了一些代码。这仅与 POST 问题有关。
require "sinatra"
require "sequel"
require "sqlite3"
DB = Sequel.connect('sqlite://pauley_wedding.db')
DB.create_table! :attendees do
primary_key :id
string :fname
string :lname
string :phone
string :email
end
@attendees = DB[:attendees]
这里是 routes/views:
get '/' do
erb :index, :layout => :layout
end
get '/about' do
erb :about, :layout => :layout
end
get '/rsvp' do
erb :rsvp, :layout => :layout
end
post '/rsvp' do
@attendees.insert(:fname => params[:fname], :lname => params[:lname], :phone =>
params[:phone], :email => params[:email])
redirect '/confirm_rsvp'
end
get '/confirm_rsvp' do
erb :confirmation, :layout => :layout
end
get '/admin' do
erb :admin, :layout => :layout
@attendees
end
@@rsvp
<style>
h1 {
color: tan;
}
.lead {
color: tan;
}
</style>
<h1><p class="lead">Sign up!</p></h1>
<form action="/rsvp" method="POST">
<p class="lead">First Name:</p><br /><input type="text" name="fname"><br /><br />
<p class="lead">Last Name:</p><br /><input type="text" name="lname"><br /> <br />
<p class="lead">Phone Number:</p><br /><input type="text" name="phone"><br /><br />
<p class="lead">Email Address:</p><br /><input type="text" name="email">
<hr />
<button class="btn btn-primary" input type="submit">Sign Up!</button>
</form>
看起来好像第一个代码块中的 @attendees
与第二个代码块中的 @attendees
相同。在第一个代码块中,@attendees
设置在似乎是顶级代码的地方。在第二个代码块中,@attendees
在路由中使用,这将是您正在使用的 Sinatra class 的一个实例。您可以尝试使用 ATTENDEES
(常量)而不是实例变量。您还可以添加数据库记录器 require 'logger'; DB.loggers << Logger.new($stdout)
以查看 SQL Sequel 正在向数据库发送什么。