0
我已经手动编写并由此当在表campaign_categories插入新行会执行以下操作添加通过phpmyadmin,MySQL和触发我的表之一:如何成功添加一个触发
BEGIN
DECLARE `main_campaign_id` INT;
DECLARE `inserted_category_id` INT;
DECLARE `new_category_row_id` INT;
SET `new_category_row_id` =
(SELECT max(`id`)
FROM `campaign_categories`);
SET `main_campaign_id` =
(SELECT `campaign_id`
FROM `campaign_categories`
WHERE `id` = `new_category_row_id`);
SET `inserted_category_id` =
(SELECT `category_id`
FROM `campaign_categories`
WHERE `id` = `new_category_row_id`);
INSERT INTO `campaign_category_metro_bids`(
`campaign_id`
,`category_id`
,`metro_id`)
SELECT
`main_campaign_id` as 'campaign_id'
,`main_category_id` as 'category_id'
,m.`metro_id` as 'metro_id'
FROM `campaign_categories`
CROSS JOIN `campaign_metros` m
WHERE m.`campaign_id` = `main_campaign_id`;
END
然而,在执行我的应用程序的行动,将在该表campaign_categories插入新行,应用程序返回以下错误信息:
ActiveRecord::StatementInvalid in CampaignsController#update
Mysql2::Error: Unknown column 'main_category_id' in 'field list': INSERT INTO `campaign_categories` (`campaign_id`, `category_id`, `created_at`, `updated_at`) VALUES (21, 1, '2014-09-28 00:01:40', '2014-09-28 00:01:40')
我怎么能允许轨道,以允许该触发器在/任何触发应用程序吗?
你确定列main_category_id存在于数据库中吗?即你运行rake db:在添加列之后进行迁移? – 2014-09-29 03:08:55
这就是问题所在,数据库中没有名为'main_campaign_id'的列。在上面的触发器中,在有DECLARE的地方它们是变量,因此没有这样的表或列被命名为'main_campaign_id,main_category_id,inserted_category_id' ...等。我应该不使用变量,而是简单地进行子选择?确保所有引用的列和表存在于数据库中? – Sauron 2014-09-29 03:12:32
我很抱歉..我不知道你的最后一个问题..你想要做什么? – 2014-09-29 03:16:54