2010-10-17 5 views
0

Этот код не работает в последней строке специально из-за проверки для table_exists? Как правильно это сделать в Datamapper?Как определить, существует ли таблица в DataMapper


require 'sinatra' 
require 'DataMapper' 

DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/blog.db") 

class Post 
    include DataMapper::Resource 
    property :id, Serial 
    property :title, String 
    property :body, Text 
    property :created_at, DateTime 
end 

DataMapper.finalize 

# automatically create the post table 
DataMapper.auto_migrate! unless Post.table_exists? 

ответ

5

Джастин,

Если у вас есть dm-migrations требуется (который в основном означает, что вы используете адаптер RDBMS в любом случае), вы можете сделать следующее, чтобы выяснить, существует ли таблица (или столбец в этой таблице).

# Find out if the table named 'people' exists 
DataMapper.repository(:default).adapter.storage_exists?('people') 

# Find out if there's a 'name' column in the 'people' table 
DataMapper.repository(:default).adapter.field_exists?('people', 'name') 

Обратите внимание, что эти методы API только запутаться в adapter если dm-migrations необходимы и вы используете DataObjectsAdapter потомка.

1

Вы можете использовать DataMapper.auto_update!, которые должны быть неразрушающим (добавляет только таблицы/столбцы).

+0

Да, спасибо, это то, что я делал, чтобы обойти эту проблему, однако мне бы очень хотелось понять, что случилось с foo.table_exists? –