如何判断DataMapper中是否存在表

时间:2010-10-17 20:35:19

标签: ruby datamapper

由于检查table_exists,此代码在最后一行失败了吗?如何在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?

2 个答案:

答案 0 :(得分: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')

请注意,如果需要adapter且您使用dm-migrations后代,这些API方法只会混入DataObjectsAdapter

答案 1 :(得分:1)

您可以使用DataMapper.auto_update!,这应该是非破坏性的(仅添加表/列)。