У меня есть вопрос. Я анализирую контент, используя Nokogiri, и моя цель - обработать этот контент и вставить в базу данных.
Table_rows содержит проанализированные элементы tr / tr, а затем я делаю Nokogiri's node.content.to_a, чтобы получить значения td, которые я хочу.
(примечание: мне нужен этот столбец rec_id, потому что я пока не знаю, как принудительно установить значение id при вставке хе-хе-хе-хе)
Приведенный ниже код генерирует исключение при попытке сохранить
table_rows.each do |row|
rec_id = row.content.to_a[0].strip.to_i
if MyModelName.where(:rec_id => rec_id) == []
MyModelName.init_from_array(row.content.to_a).save
end
end
init_from_array содержит простой код, подобный этому:
def self.init_from_array(array)
@mymodelname = MyModelName.new
@mymodelname.field1 = array[0].strip #strip to avoid any empty
@mymodelname.field2 = array[1].strip
#and so on...
@mymodelname
end
Внутри контроллера я просто вызываю этот метод между началом и спасением. MyModelName на данный момент не имеет никакой проверки.
Что я делаю неправильно, чтобы получить такое поведение - он генерирует «не удается выполнить откат, транзакция не активна», но сохраняет запись в базе данных.
редактирование:
вот исключение
SQLite3 :: SQLException: невозможно выполнить откат - ни одна транзакция не активна из /opt/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.3.2/lib/sqlite3/database.rb:97:in закрыть 'из /opt/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.3.2/lib/sqlite3/database.rb:97:inprepare' из / opt / local / lib / ruby / gems / 1.8 / gems / sqlite3-ruby-1.3.2 / lib / sqlite3 / database.rb: 134: in execute 'из