ActiveRecord + SQLite 3 ведет себя странно - PullRequest
0 голосов
/ 16 января 2012

Используя activerecord, я сделал этот запрос

AdImage.select("ad_images.id, ad_images.locale_id, ad_campaigns.click_url,
ad_campaigns.default_ad_image_id").joins("left outer join ad_campaigns on
ad_campaigns.id = ad_images.ad_campaign_id").where("ad_images.ad_campaign_id" => 1)

, который генерирует следующий SQL-запрос:

SELECT ad_images.id, ad_images.locale_id, ad_campaigns.click_url,
ad_campaigns.default_ad_image_id FROM "ad_images" left outer join ad_campaigns on
ad_campaigns.id = ad_images.ad_campaign_id WHERE "ad_images"."ad_campaign_id" = 1

, и в результате получается следующее:

 => [#<AdImage id: 22, click_url: "market://details?id=com.mobiata.flighttrack",
    locale_id: 2>] 

что неправильно.

Поэтому я использовал метод ActiveRecord :: Base.connection.execute для прямого запуска запроса sql:

ActiveRecord::Base.connection.execute("SELECT ad_campaigns.click_url, ad_images.id, 
ad_images.locale_id, ad_campaigns.default_ad_image_id FROM ad_campaigns inner join
ad_images on ad_campaigns.id = ad_images.ad_campaign_id WHERE ad_images.ad_campaign_id = 1")

, который возвращает следующее:

[{"click_url"=>"market://details?id=com.mobiata.flighttrack", "id"=>22, "locale_id"=>2,
"default_ad_image_id"=>22, 0=>"market://details?id=com.mobiata.flighttrack", 1=>22,
2=>2, 3=>22}] 

со странным повторением.

Единственное различие между первым и вторым - это "ad_images" и ad_images в именах таблиц.

Мои вопросы:

1) Я не понимаю, в чем заключается эта разница.

2) Почему второй запрос возвращает мусор в SQLite3, а на сервере MySQL этого не происходит?

1 Ответ

0 голосов
/ 17 января 2012
  1. В итоге я использовал «ActiveRecord :: Base.connection.execute» вместо использования помощников RailR ActiveRecord.Похоже, других решений для этого не существует.

  2. Оказывается, что вы должны использовать значения индекса вместо имен столбцов в двойных кавычках при вызове значений.В противном случае вы столкнетесь с ошибками типа при использовании в производстве с MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...