Я пытаюсь удалить несколько строк в таблице actionable_items с помощью следующей миграции. Я отлаживал и могу подтвердить, что переменные, которые хранят строку таблицы, не ноль. Миграция выполняется успешно, но она не удаляет строку из таблицы. Кроме того, кто-нибудь знает, почему я могу отлаживать миграцию, когда я запускаю rake db:migrate:redo
, но не когда я запускаю rake db:migrate
?Rails удалить строку таблицы с помощью миграции
class RemoveActionableItems < ActiveRecord::Migration
class ActionableItem < ActiveRecord::Base
attr_accessible :actionable_item, :name, :sequence, :type
end
class MenuItemTEMP < ActionableItem
self.table_name = "actionable_items"
end
class InsightReportMenuItemTEMP < ActionableItem
self.table_name = "actionable_items"
end
def up
validation_settings = MenuItem.find_by_name("Validation Settings")
identifier_lookup = MenuItem.find_by_name("Identifier Lookup")
compliance = InsightReportMenuItem.find_by_name("Compliance")
debugger
validation_settings.destroy! #unless validation_settings.nil?
identifier_lookup.destroy! #unless identifier_lookup.nil?
compliance.destroy! #unless compliance.nil?
end
def down
MenuItem.create :name => "Validation Settings", :type => "MenuItem"
MenuItem.create :name => "Identifier Lookup", :type => "MenuItem"
InsightReportMenuItem.create :name => "Compliance", :type => "InsightReportMenuItem"
end
end
Я также попытался удалить из консоли рельсы, но еще раз, pgAdmin показывает строка не удаляется.
pmpaware-webapp(development)> compliance = InsightReportMenuItem.find_by_name("Compliance")
InsightReportMenuItem Load (3.8ms) SELECT "actionable_items".* FROM "actionable_items" WHERE "actionable_items"."type" IN ('InsightReportMenuItem') AND "actionable_items"."name" = 'Compliance' LIMIT 1
=> #<InsightReportMenuItem id: 264, name: "Compliance", actionable_item_id: nil, created_at: "2015-07-23 18:57:25", updated_at: "2015-07-23 18:57:25", actionable_items_count: 0, sequence: nil, type: "InsightReportMenuItem">
pmpaware-webapp(development)> compliance.errors
=> #<ActiveModel::Errors:0x007fc0735ac540 @base=#<InsightReportMenuItem id: 264, name: "Compliance", actionable_item_id: nil, created_at: "2015-07-23 18:57:25", updated_at: "2015-07-23 18:57:25", actionable_items_count: 0, sequence: nil, type: "InsightReportMenuItem">, @messages={}>
pmpaware-webapp(development)> compliance.delete
SQL (111829.8ms) DELETE FROM "actionable_items" WHERE "actionable_items"."type" IN ('InsightReportMenuItem') AND "actionable_items"."id" = 264
=> #<InsightReportMenuItem id: 264, name: "Compliance", actionable_item_id: nil, created_at: "2015-07-23 18:57:25", updated_at: "2015-07-23 18:57:25", actionable_items_count: 0, sequence: nil, type: "InsightReportMenuItem">
Похоже 'грабли БД: migrate' должны были удалены записи. Возможно ли, что у вас много записей с тем же именем. Можете ли вы попытаться запустить 'MenuItem.where (имя:« Настройки проверки »). Delete_all' в консоли и посмотреть, есть ли еще такие записи. – abhishek77in
@ abhishek77in Я знаю правду, странно! Но нет, есть только один случай для каждой записи - подтвержденный через pgAdmin –