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 正在向数据库发送什么。