1. Ruby / Говнокод #16813

    −93

    1. 1
    deals = Deal.joins(:deal_locations).select("deals.id, (SELECT array(SELECT category_id FROM deal_categories WHERE deal_id = deals.id ORDER BY category_id ASC)) AS category, deals.start_date, deals.end_date, deals.address, deals.theme, deals.alias, deals.metro, deals.district, deals.discount, deals.coupon_count, deals.issued_coupons, deals.main_image, count(*) OVER() AS total_count, trunc(abs(extract(epoch FROM age(deals.end_date, clock_timestamp()))/86400)) AS days_left").where("deal_locations.deal_id = deals.id AND deal_locations.location_id = ? AND deals.category_id IN (#{categories[0...-2]}) AND deals.id NOT IN (#{ex_deals.map{|e| e}.join(", ")})", params[:location].to_i).active.in_stock.limit(limit).offset(offset).order("deals.start_date desc")

    Rails. Да, да, активрекорд, я помню о тебе.

    Запостил: adastreamer, 07 Октября 2014

    Комментарии (29) RSS

    • 100% код купикупона какого-нибудь
      Ответить
    • deals = Deal
        .joins(:deal_locations)
        .select(<<-SQL
          deals.id,
          (
            SELECT array(
              SELECT category_id
              FROM deal_categories
              WHERE deal_id = deals.id
              ORDER BY category_id ASC
            )
          ) AS category,
          deals.start_date,
          deals.end_date,
          deals.address,
          deals.theme,
          deals.alias,
          deals.metro,
          deals.district,
          deals.discount,
          deals.coupon_count,
          deals.issued_coupons,
          deals.main_image,
          count(*) OVER() AS total_count,
          trunc(abs(extract(epoch FROM age(deals.end_date, clock_timestamp()))/86400)) AS days_left
          SQL
          )
        .where(<<-SQL, params[:location].to_i
          deal_locations.deal_id = deals.id
            AND
          deal_locations.location_id = ?
            AND
          deals.category_id
            IN (#{categories[0...-2]}) AND deals.id NOT IN (#{ex_deals.map{|e| e}.join(", ")})"
          SQL
          )
        .active
        .in_stock
        .limit(limit)
        .offset(offset)
        .order("deals.start_date desc")


      думаю, так будет легче оценить масштаб бедствий
      Ответить
      • Вручаю вам орден "За заслуги перед Тарасом" первой степени
        Ответить
        • Перед Тарасом Шевченко?
          Ответить
          • Ты если пытаешься хохлосрачь развести - Сему тыкай, а мне чет надоело. Старый я стал
            Ответить
            • Нет понятия "хохлосрач", есть понятие "имперский имбецил"
              Ответить
            • Как ты мог такое подумать? Просто это первое, что пришло в голову. Если бы тут было написано про Александра, то я бы спросил про Пушкина. Если бы тут было написано про Василя, то я бы спросил про Быкова. Если бы тут было написано про Чингиза, то я бы спросил про Айтматова. Если бы тут было написано про Виктора, то я бы спросил про Гюго.

              При чём тут срачи вообще?
              Ответить
      • Хорошо, что Руби — это не Питон.
        Ответить
      • Бля, стоит теперь после этого руби учить, или ну его?
        Ответить
        • ну чтобы не городить такие портянки - стоит) человек видимо из мира где про ORMы еще не слышали)
          Ответить
          • ОРМ зло. Видишь юзавшего ОРМ убей, сколько видишь столько и убей.
            Ответить
            • Чем тебе ORM не угодил? Code first не любишь?
              Ответить
              • ORM - уг
                Это обсуждалось тут уже несколько раз.
                Ответить
                • Да блин, большенство современных технологий - уг.
                  ORM хотя бы мозг не сношает. Не все же могут CREATE TABLE
                  Логично что в сурьезных проектах бд должны создаваться знающими людьми, но почему простому рядовому кодеру не ORMнуть свои классы в базу дазы?
                  Ответить
                  • Сколько раз на дню нужно делать create table ?

                    А как объяснить компутеру когда нужно left join, а когда нет?
                    Ответить

    Добавить комментарий