Сохранение данных с помощью DataMapper

Я пытаюсь сохранить в базу данных sqlite 3. Не могу сохранить, но ошибок не выдает. Что я делаю неправильно? Я взял процедуру сохранения из ранее существовавшего кода, который работает. Любые идеи о том, что я должен попробовать дальше?

require 'data_mapper'
require 'dm-migrations'

DataMapper.setup :default, "sqlite://#{Dir.pwd}/development.sqlite3"

class Post
  include DataMapper::Resource
  property :title,      String, :key => true # An auto-increment integer key
  property :slug_url,   String   
  property :desc,       String
  property :content,    String
  property :project,    String
  property :target_url, String
  property :trackback,  Boolean
  property :updated_at, String
  property :created_at, DateTime  # A DateTime, for any date you might like.
end

DataMapper.finalize
DataMapper.auto_upgrade!

post = Post.new
post.attributes = {:title => "Title",
                :slug_url => "Some-slug-url",
                :content => "content",
                :target_url => "http://example.com",
                :trackback => false
}
post.save

person Noah Clark    schedule 01.12.2011    source источник


Ответы (2)


Я не уверен, почему это работает по-другому, но я заставил его работать, выполнив следующее:

require 'data_mapper'
require 'dm-migrations'

DataMapper.setup :default, "sqlite://#{Dir.pwd}/development.sqlite3"

class Post
  include DataMapper::Resource
  property :title,      String, :key => true # An auto-increment integer key
  property :slug_url,   String    # A varchar type string, for short strings
  property :desc,       String
  property :content,    String
  property :project,    String
  property :target_url, String
  property :trackback,  Boolean
  property :updated_at, DateTime
  property :created_at, DateTime  # A DateTime, for any date you might like.
end

DataMapper.finalize
DataMapper.auto_upgrade!

post = Post.new(:title => "Title",
                    :slug_url => "Some-slug-url",
                    :content => "content",
                    :target_url => "http://example.com",
                    :trackback => false)
post.save
person Noah Clark    schedule 01.12.2011

Часть «ошибки не выдаются» может быть исправлена ​​с помощью DataMapper::Model.raise_on_save_failure = true, DataMapper по умолчанию не срабатывает. #save! — небезопасная версия (не знаю, почему ActiveRecord использует совершенно другую семантику для взрыва). Дополнительную информацию можно найти здесь.

Первая выданная ошибка была column title is not unique (DataObjects::IntegrityError). Угадайте, что случилось ;-)

person Reactormonk    schedule 05.12.2011