Задать вопрос
  • Как правильно составить запрос?

    viktorvsk
    @viktorvsk
    Конечно, можно составить запрос, что бы mysql на ходу считал количество каждой ассоциации. Но по смыслу, это немногим лучше сортировки уже средствами ruby
  • Как правильно составить запрос?

    viktorvsk
    @viktorvsk
    Хорошее решение - использовать counter_cache. Добавление такого поля - это хорошо, а не плохо. Зря вам такой вариант не нравится :) вот источник: railscasts.com/episodes/23-counter-cache-column
  • Как отправить файл http post запросом с параметрами используя Ruby?

    viktorvsk
    @viktorvsk
    раз bad request, значит что-то не так со ссылкой. смотрели, что точно генерирует ваш uri? и в какой директории относительной ваш файл находится?
  • Плюсы/минусы смены профиля с PHP на Python/Ruby. Оно того стоит?

    viktorvsk
    @viktorvsk
    @Denipsys: Не за что. Вот и попробуйте для начала с помощью питона или руби автоматизировать свою работу: поможет в основной работе и разберетесь немного в другом стеке. Например, один из стандартов "простого деплоя" как раз и написан на руби, а используется повсеместно: https://github.com/capistrano/capistrano
  • Плюсы/минусы смены профиля с PHP на Python/Ruby. Оно того стоит?

    viktorvsk
    @viktorvsk
    Ну например:
    В айти везде спрос выше предложения уже давно и еще долго будет

    Даже если джунов ищут и меньше, то их все равно нужно много. Плюс, если есть опыт, то въехать в рельсы или джанго можно довольно быстро и претендовать не совсем на джуна.

    Не питонист, но сильно сомневаюсь, что его будущее не определено. Тем более, если разница версий языка становится чем-то серьезным в работе - это проблема разработчика, а не языка. Ну поменялось там что-то. Ну пролистайте справочник, напишите пару кусков различного кода. И перепишите задачу с 3 на 2, с 2 на 3. Делов то.

    Да сейчас все в айти, что есть, - стремительно развивается. Говорят, что питон застрял, так как им пользуются восновном ученые, а их уже давно все устраивает. Но это тоже только слухи. Развиваются все. И, что самое интересное, нет ничего невозможного в том, что именно вы один случайно сделаете толчок к новому равитию. Это вообще не аргумент. Производительность станет выше в PHP ? Чаще всего она никого не интересует.

    Зарплаты разные? Честно, я так до сих пор и не понял суть градаций джун\мидл\синьор. И кто какую зарплату получает - это тоже дело случая и самоуверенности.

    На питоне и руби написано действительно больше десктопных программ и консольных утилит. Но PHP - это тоже general purpose язык. Просто, как-то не срослось. Если вы считаете плюсом тот факт, что занимаясь, например, питоном, вы вскользь познакомитесь с написанием утилит, то что мешает начать их писать на питоне, занимаясь PHP ? Для того, что б что-то немножко автоматизировать на другом языке невероятных знаний не нужно - это хорошее упражнение для того, кто работает на любом стеке.

    Не возьмусь точно сказать, как там в пхп, но думаю последние 2 пункта идут вместе. Я думаю, сегодня на PHP можно написать хороший, читаемый, поддерживаемый и производительный код, если у тебя есть опыт. Так же, как набыдлокодить на руби. Мне лично синтаксис и бестпрактис PHP нравится меньше, чем аналогичное в руби или джаваскрипте (то, с чем успел познакомиться). Но, думаю, это все просто субъективно, дело привычки и того, кто с чего начинал.

    Менять стек нужно, если хочется разнообразия или тот, другой, привлекает, нравится субъективно, помогает намного легче решать задачи, с которыми вы чаще всего сталкиваетесь. Или текущая задача очень важна и нужно решить ее лучшим способом. А явно не из-за того, что где-то опубликовали мнимую статистику, что там больше платят
  • Какой процент с проекта берут веб-студии?

    viktorvsk
    @viktorvsk
    Как решаете ситуацию, когда, представим, что наняли верстальищика за 15, кодера за 25, дизайнера за 20, а проработали они, соответственно, 10, 15, 30 часов.

    Как пересчитываете в свои 30 ?)
  • В чем минус хоститься на github pages?

    viktorvsk
    @viktorvsk
    если вас интересует именно бесплатность, то есть кучи бесплатных php хостингов. Например hostinger.
  • В чем минус хоститься на github pages?

    viktorvsk
    @viktorvsk
    Антон: кому как. Если вам удобнее, то гхп явно не для вас. Он именно для этого и создан
  • Что выбрать: выделенный сервер или облачный сервер?

    viktorvsk
    @viktorvsk
    Игорь Баляс: вы еще скажите, что денег неограничено и просто нужно что б было круто :)
    Облако - это всегда будет дороже, вопервых.
    Во-вторых, что вы называете стабильностью ? Когда Ваши сокровенные данные находятся в другой компании, это стабильно в Вашем случае?

    Под облачным сервером Вы имеете виду PaaS ?

    Тогда, конечно, куда лучше взять какой-нибудь Heroku, где не надо будет думать о большей части инфраструктуры. Но тогда возникнет другой вопрос: есть у вас человек, которому вы доверите свои данные, с навыком работы с Хероку или Амазоном?

    Короче, я к чему: нельзя ответить на этот вопрос без каких-то конкретных начальных данных.
  • В чем минус хоститься на github pages?

    viktorvsk
    @viktorvsk
    Антон: работы и блог делаются пушем. Вы знаете, как загружать файлы на гитхаб?
  • В чем минус хоститься на github pages?

    viktorvsk
    @viktorvsk
    Тогда минусов не будет. Все так не делают потому, что не все дружат с гитом. И не все знают о гитхабе, как не странно
  • Rails form_for как заставить форму генерировать путь без модуля?

    viktorvsk
    @viktorvsk
    Руслан Галиев: На за что :) Кстати, проверка в method, скорее всего, лишнее.
  • Rails form_for как заставить форму генерировать путь без модуля?

    viktorvsk
    @viktorvsk
    Руслан Галиев: stackoverflow.com/questions/3741979/form-for-and-s... вот здесь более подробно о плюсах и минусах разных подходов. И вроде как, делают именно проверкой на существование объекта в итоге
  • Можно ли сгруппировать запрос по OR в WHERE с помощью Ransack?

    viktorvsk
    @viktorvsk Автор вопроса
    Павел Бакин: я исходил из стандартной структуры - есть типы фильтров и есть значения фильтров. Удобно в плане того, что быстро работает на сотнях тысячах товаров, на нескольких тысячах фильтров и десяткам тысяч значений фильтров. Только с привычной пользователю фильтрацией были сложности, которые сначала решал, перебирая товары уже после выборки средствами руби. Потом пришел к intersect
  • Можно ли сгруппировать запрос по OR в WHERE с помощью Ransack?

    viktorvsk
    @viktorvsk Автор вопроса
    Выглядит ужасно, конечно) Но в плане использования одного запроса - единственное, что получилось
  • Можно ли сгруппировать запрос по OR в WHERE с помощью Ransack?

    viktorvsk
    @viktorvsk Автор вопроса
    Тоже немного не то.
    Представим, что вы выбрали properties = [25,35, 36].
    Где товар - это ноутбук. 25 характеристика - это объем HDD 500 ГБ, 35 - диагональ экрана 15,6 ", 36 - диагональ экрана 17,3.

    То есть, я хочу получить все ноутбуки с диагональю 15 и 17, и исключить те, которые не с HDD = 500 ГБ. В итоге обычный поиск не сработает. Для фильтров нужно составлять запрос по OR внутри одного типа (например, 15" or 17" or 11") и по AND между фильтрами (объем HDD AND диагональ экрана)

    (Вообще, я так понимаю, в предложенном варианте товар преналежит одной характеристике?)

    Я это в итоге решил с помощью intersect, ничего лучше не найдя:

    def self.filter(filters)
        return self.all if filters.nil?
    
        # Build hash from params.
        # Params pattern is :property_id/:product_property_value/:property_id..
        # We cant use Hash[*args] because it overrides similar hash keys
        # But we should have array of values for each property_id
        hs = {}
        by_intersect = []
        arr = URI::decode(filters).split('/').map(&:to_i).map(&:to_s)
        arr.each_with_index do |x,i| 
          next if i.odd?
          hs[x] ||= []
          hs[x] << arr[i+1]  
        end
    
        # Produce query for each property
        # We mix products that have any of property values
        # And then filter by properties with SQL INTERSECT
        hs.keys.each do |key|
          values = []      
          hs[key].each do |val|
            values << val
          end
          key = self.sanitize(key)
          vals = values.map do |x| 
            self.sanitize(x)
          end.join(", ")
          condition = %{
            "product_filters"."filter_type_id" = #{key} AND
            "product_filters"."filter_value_id" IN (#{vals})
          }
          select_query = %{
            SELECT "products"."id" 
            FROM "products" 
            INNER JOIN "product_filters" 
              ON "product_filters"."product_id" = "products"."id" 
            WHERE
              #{condition}
          }
          by_intersect << select_query      
        end
    
        # Combine all partial queries by property
        # into one with INTERSECT
        query = by_intersect.join("\nINTERSECT\n")
        result = ActiveRecord::Base.connection.execute(query)
    
        # As query result we get only products id
        # Due to its faster than intersecting\ joining
        # Heavy table with descriptions
        ids = result.map{ |q| q.first.last }
    
        # And then get exact products
        Product.where(id: ids)
      end
  • Вроде, говорили, что Тостер на рельсах?

    viktorvsk
    @viktorvsk Автор вопроса
    Интересно. Там пишут, что 9 технологий выбыли. Не знаете, можно ли там посмотреть, какие именно ? Зарегистрировался и в Historical Changes вижу, что Frameworks было 2. А вот какие - не вижу.
  • Вроде, говорили, что Тостер на рельсах?

    viktorvsk
    @viktorvsk Автор вопроса
    Интересно было, если б рассказали, почему отказались