1

Sequel を使用して Sinatra アプリケーションで作業しています。

DBオブジェクトを使用する必要があるマニュアルに従って、トランザクションを作成したいのですが、コードの任意の部分からこのオブジェクトを取得するにはどうすればよいですか?

4

2 に答える 2

2

ベースのapp.rb(または同等のもの)で定義するか、必要に応じてDBオブジェクトを構成する別のファイルを含めることができます。

たとえば、私のSinatraアプリの1つに、

class App < Sinatra::Application
  #lots of stuff here...
end

require_relative 'models/init'

私のmodels/init.rbで、DBを構成します

require 'sequel'

conf = YAML.load(File.open(File.expand_path('./config/dbconn.yml')))
env = ENV['RACK_ENV'] || 'development'
DB = Sequel.connect(host:conf['database'][env]['host'],
                    port:conf['database'][env]['port'],
                    database:conf['database'][env]['schema'],
                    username:conf['database'][env]['username'],
                    password:conf['database'][env]['password'],
                    adapter:conf['database'][env]['adapter'],
                    encoding:conf['database'][env]['encoding'])
raise "Unable to connect to #{conf['database'][env]['host']}" unless DB.test_connection

...

それが1つの方法です。それが役に立てば幸い。

于 2012-11-27T21:43:50.130 に答える
1

コードの任意の部分から参照したいと述べています。ただし、モデル内にカプセル化されているのは、トランザクションをラップする傾向があることです。そこからは比較的簡単です。

class X < Sequel::Model
  def self.y
    self.db.transaction {
    ...
    end
  end
  def z
    db.transaction {
    ...
    }
  end
end  
于 2014-09-28T18:04:56.923 に答える