ruby datamapper не может сохранить в базе данных - PullRequest
1 голос
/ 22 апреля 2011

У меня есть такая схема базы данных

DataMapper.setup :default, "sqlite://#{Dir.pwd}/image.db"
class Image
    include DataMapper::Resource

    property :id       , Serial
    property :url , String,unique: true
    property :desc    , String,unique: true,default: "empty"
end
DataMapper.finalize.auto_upgrade!

Тогда у меня есть такая петля

links.each do |link|
  puts link
  if Image.all(:url=>link).empty? == true
    img=Image.create(:url => link)
    puts "Cannot save to database "if img.saved? == false
  end
end

Я хочу добавить ссылку, когда ее еще нет в базе данных. Я запускаю скрипт и всегда получаю не могу сохранить в базу данных. Что я делаю неправильно? Спасибо за любую помощь. Редактировать: я добавляю в свой код

DataMapper::Logger.new($stdout, :debug)

и не было запросов на вставку, только выбирает.

Ответы [ 2 ]

3 голосов
/ 22 апреля 2011

Вы объявили: свойство desc уникальным и установили значение по умолчанию «пусто», и в своем примере кода вы создаете Image без указания: desc, что приводит к ошибке проверки уникальности, поэтому ваши изображения не сохраняются.Вы можете удалить уникальную опцию из объявления свойства desc или указать уникальное значение для: desc при создании изображений.

Кроме того, чтобы сделать ваш код более подробным, чтобы вы могли увидеть ошибки проверки, попробуйте следующее:1003 *

links.each do |link|
  image = Image.new(:url => link)

  if image.save
    puts "Image saved"
  else
    puts "Failed to save image: #{image.errors.inspect}"
  end
end

Обратите внимание, что для использования ошибок валидации вам понадобится гем 'dm-validations'.

0 голосов
/ 22 апреля 2011

Что вы имеете в виду, что вы «не можете сохранить в базу данных»?

Вы можете попробовать что-то вроде этого и посмотреть, работает ли он немного лучше:

links.each do |link|
  if Image.first(:url => link)
    p "image exists"
  else
    if Image.create(:url => link) 
      p "Image succesfully saved"
    else
      p "could not save image"
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...