Сохранение данных с помощью DataMapper - PullRequest
0 голосов
/ 01 декабря 2011

Я пытаюсь сохранить в базе данных 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

Ответы [ 2 ]

0 голосов
/ 05 декабря 2011

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

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

0 голосов
/ 01 декабря 2011

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

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
...