sql = DmozCategory.send(:sanitize_sql_array, ["INSERT INTO dmoz_categories (id, dmoz_category_title, dmoz_category_name, dmoz_category_description, created_at, updated_at, dmoz_category_lastupdate) VALUES (?, ?, ?, ?, NOW(), NOW(), ?)", result['catid'], result['title'], result['name'], result['description'], result['lastupdate']])
res = DmozCategory.connection.execute(sql)
$stderr.puts res.inspect
res
всегда nil
, несмотря на то, что я могу видеть DmozCategory вставляет в базу данных. Как получить id
после моей вставки?Rails ActiveRecord: Получение идентификатора необработанного вставки
Я понимаю, что я мог использовать другой SQL-запрос SELECT LAST_INSERT_ID()
, чтобы получить идентификатор, но мне было интересно, есть ли способ получить идентификатор через Rails. M
фона: с помощью Rails 2.3.14
UPDATE: Хм, я думаю, что проблема лежит с плагином я использую называется Octopus. Извините за дисконтирование некоторых ваших ответов. Похоже, мне нужно найти, как получить последний идентификатор вставки с помощью этого плагина. Моя полная соя:
desc "load all categories from dmoz" # With this one we're loading all the 'structure' table in, not the parent-child relationships.
task :load_categories_from_dmoz, [ :offset, :limit ] => :environment do |t, args|
offset = !args[:offset].blank? ? args[:offset].to_i : 0 # Take offset from args. Default of 0
limit = !args[:limit].blank? ? args[:limit].to_i : 1 # Take limit from args. Default of 1
ActiveRecord::Base.octopus_establish_connection(:adapter=> "mysql", :host=> "localhost", :database => "dmoz", :username => "dmoz", :password => "dmoz")
results = ActiveRecord::Base.connection.select_all("SELECT * FROM structure LIMIT #{ offset }, #{ limit }") # Fetches it directly from the dmoz database.
count = offset
conn = ActiveRecord::Base.octopus_establish_connection(:adapter=> "mysql", :host=> "localhost", :database => "talon_development", :username => "rails_shadow", :password => "husky")
results.each do |result|
if count % 1000 == 0
puts count
end
count +=1
begin
sql = DmozCategory.send(:sanitize_sql_array, ["INSERT INTO dmoz_categories (id, dmoz_category_title, dmoz_category_name, dmoz_category_description, created_at, updated_at, dmoz_category_lastupdate) VALUES (?, ?, ?, ?, NOW(), NOW(), ?)", result['catid'], result['title'], result['name'], result['description'], result['lastupdate']]) #We leave parent_id NULL for the next task to handle relationships
DmozCategory.connection.execute(sql) #doesn't get the ID..
end
end
end
попробовать '' exec_query' и last_inserted_id (разрешение) ' –
@YuriBarbashov Я не думаю, что это доступно в Rails 2.3.14? – babonk
Вы не вставляете идентификатор самостоятельно? 'INSERT INTO dmoz_categories (id, ...) VALUES (?, ...), result ['catid'], ...'? –