Active Record Insert Into

时光毁灭记忆、已成空白 提交于 2020-01-05 10:26:53

问题


I am trying to allow my Rails App some advanced functionality in way of creating relationships. I am running MySQL as the back-end. The query below runs just fine in PHPMyAdmin, but upon attempted execution in rails, it does nothing, no errors and no database writes....

I use active record to create the relationships between Campaign and Location, and then the query below should work to build afterward in campaign_metros table:

class CampaignLocation < ActiveRecord::Base
    belongs_to :campaign
    belongs_to :location

    after_touch :create_campaign_metro


    private
        def create_campaign_metro
            @sql_insert="INSERT INTO `campaign_metros` (`campaign_id`,`metro_id`, `created_at`,`updated_at`)
                    SELECT f.`campaign_id`, f.`city_id`, NOW(), NOW()
                    FROM (SELECT d.`campaign_id`, d.`city_id`
                        FROM (SELECT c.`campaign_id`, c.`city_id` 
                              FROM  (SELECT distinct a.`campaign_id`, b.`city_id`
                                        FROM `campaign_locations` a
                                        INNER JOIN `locations` b 
                                        ON a.`location_id` = b.`id`) c) d
                        LEFT JOIN `campaign_metros` e
                            ON e.`campaign_id` = d.`campaign_id` and
                               e.`metro_id`    = d.`city_id`
                        WHERE e.`metro_id` is null and e.`campaign_id` is null) f;"

            ActiveRecord::Base.connection.execute(@sql_insert)
        end
end

I know from MySQL DELETE FROM with subquery as condition, in answer number two by CodeReaper, that MySQL requires another level of aliases when dealing with subqueries, but running my query in Rails does nothing at all.

How can I get this to work?

来源:https://stackoverflow.com/questions/27626194/active-record-insert-into

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!