• Как сделать has_and_belongs_to_many с сортировкой?

    Jeiwan
    @Jeiwan
    Видится только такое решение: добавить в таблицы products_videos и product_groups_videos колонку position, в которую сохранять порядковый номер видео в списке. То есть для этого примера:
    Есть Товар 1 к которому относятся видео 4,1,3
    у видео 4 position = 0, у видео 1 position = 1, у видео 3 position = 2 (точнее не у самих видео, а у записей в таблицах-связках). И потом сортировать по этой колонке.
    А позиции эти можно задавать при создании товара и группы. Или вообще сделать, чтобы они автоматически проставлялись в зависимости от порядка загрузки видео.
    По поводу выборки, должно получится что-то вроде этого: Product.find(1).videos.order('product_videos.position') — но я не уверен, что тут будет доступна product_videos для сортировки, не помню, какой запрос делается при has_and_belongs_to_many.

    Всё это в теории, но, по идее, должно сработать. :)
    Ответ написан
  • Поможете разобраться в синтаксисе?

    Jeiwan
    @Jeiwan
    factory – это метод, которому передается параметр :home (в руби, как известно, круглые скобки можно опускать) и блок (всё, что между do и end). factory вызывается в блоке, который передается в FactoryGirl.define, где define – метод класса FactoryGirl. И, да, всё это и есть тот самый DSL.
    test = create (:home) – на самом деле, полная запись выглядит как FactoryGirl.create(:home). Просто чтобы не писать постоянно класс FactoryGirl, его методы инклудят в файле spec_helper.rb: config.include FactoryGirl::Syntax::Methods
    Тема довольно трудная для понимания. О том, как устроен FactoryGirl очень хорошо написано в статье https://robots.thoughtbot.com/writing-a-domain-spe... – там пишется свой FactoryGirl с объяснением всех моментов.
    Ответ написан
    1 комментарий
  • Как выполнить одну функцию javasript после другой?

    Jeiwan
    @Jeiwan
    Передавать count в качестве коллбэка в changeContent и вызывать её там по завершении. В changeContent, по видимому, что-то асинхронное происходит.
    Ответ написан
    Комментировать
  • Как правильно тестировать модульные Javascript-приложения?

    Jeiwan
    @Jeiwan
    Приватные методы обычно не тестируются, так как в этом нету смысла. Если в них есть какая-то ошибка, то это отразится и на публичных методах. А публичные методы тестируются всегда, так как именно через них и происходит взаимодействие между разными компонентами.
    Ответ написан
    1 комментарий
  • Почему в функцию переданы странные параметры объекта?

    Jeiwan
    @Jeiwan
    Аргументы функции могут иметь какое угодно название, так как они будут использоваться только внутри функции. К внешним переменным они никакого отношение не имеют.
    В примере у массива вызывается функция sort, которая принимает функцию, определяющую алгоритм сортировки. И вот эта функция, по документации, должна принимать два параметра.
    Ещё можете посмотреть функции forEach, map, filter, reduce – они работают по такому же принципу.
    Ответ написан
  • Как грамотно сделать статус заказа?

    Jeiwan
    @Jeiwan
    Если статусов будет только два (Обработан/Не обработан), то достаточно булеана.
    Если статусов будет много, то лучше прикрутить state-machine (AASM/Workflow). В этом случае можно будет сделать, чтобы на в разных статусах были доступны разные действия с заказом.
    Если статусов будет много, но стейт-машина избыточна (или лень возиться с ней), то можно воспользоваться стандартной рельсовой фичей enum (edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html).

    Создавать отдельную модель как-то совсем избыточно. Только если там ещё какой-то функционал будет, но сходу придумать какой-то пример не могу.
    Ответ написан
    Комментировать
  • Какие инструменты (ПО) вы используете при разработке на RoR?

    Jeiwan
    @Jeiwan
    1. Vim (MacVim) — уже давно привык к нему, и теперь обычные редакторы/IDE кажутся неудобными. + я постоянно работаю на ноутбуке, и тут ориентированность вима на работу с клавой очень кстати.
    2. Git — обычный консольный гит. В гуи необходимости ни разу не возникало, несмотря на наличие сложных задач с ветками.
    3. ITerm 2 — не помню уже, почему именно он, но консоль — она и в Африке консоль.
    4. ag — для поиска по проекту. Работает быстрее, чем grep.
    5. SequelPro + постгресовская консолька — для работы с БД. Но пользуюсь ими крайне редко, обычно всё делаю через ActiveRecord или arel.
    6. TextEdit — для ведения списка задач, напоминалок, формулирования мыслей и т. п.
    Ответ написан
    Комментировать
  • С какого языка программирования начать изучение back-end?

    Jeiwan
    @Jeiwan
    Если совсем нету знаний принципов работы web'а и опыта в этой области, то ваш единственный вариант — PHP. Не слушайте тех, кто пишет, что язык плох или называет PHP-шников "быдлокодерами" — всё это хрень полнейшая. Проблема в программистах, а не в языке.
    PHP прост, востребован, на нем делают большое количество простых сайтов — благодаря всему этому найти первую работу будет намного проще. А найти первую работу — самое важное для новичка, так как именно на работе можно очень сильно прокачать навыки и стать настоящим специалистом. А насколько плохой или хороший код вы будете писать, зависит только от вас.
    По поводу Ruby. Я сам работаю рельсовиком и ни за что и никогда не посоветую новичкам начинать с него. Это здоровенная махина, для работы с которой необходим уже какой-то опыт и неплохое понимание работы web'а. К тому же новичку будет очень трудно найти работу, так как на рельсах обычно пишут более сложные приложения, и совсем новичку там делать будет нечего.
    Ответ написан
  • Как протестировать модуль?

    Jeiwan
    @Jeiwan
    describe '.authenticate_with_token' do
      before do
        allow(authentication).to receive(:current_user).and_return(nil)
        allow(authentication).to receive(:render) do |args| # возвращаем аргументы
          args
        end
      end
    
      it 'returns error' do
        expect(authentication.authenticate_with_token![:json][:errors]).to eq 'Not authenticated'
      end
    
      it 'returns unauthorized status' do
        expect(authentication.authenticate_with_token![:status]).to eq :unauthorized
      end
    end


    Ваша ошибка в том, что вы думаете, что тестируете контроллер. На самом деле, контроллер здесь нужно только для того, чтобы было можно протестировать методы модуля (для инклуда модуля можно даже взять голый класс). И метод response тут будет недоступен, так как мы тестируем модуль, а не контроллер.
    Ответ написан
    2 комментария
  • Как распределить время при обучении программированию?

    Jeiwan
    @Jeiwan
    Никто вам точно не ответит. Никто не знает ваших обстоятельств, способностей, желания учиться. Никто не знает насколько глубоко вы будете изучать эти темы и насколько тщательно прорабатывать их. Дать точные сроки вам смогут, только если вы будете следовать какой-то отработанной учебной программе. И то даже после таких программ люди выходят с разным уровнем знаний и умений. Все зависит от вас. Да и не нужно знать все эти темы для того, чтобы начать работать.
    Главная ваша проблема (и проблема других таких же людей, которые решили научиться программировать) заключается в том, что вы почему-то считаете, что сможете обучиться программированию по книгам. Прочитал книжки и стал программистом! Это обманчивый путь, так как программирование — это чистая практика. Теория тут нужна только тогда, когда нужно решить какую-то практическую трудность. Чтобы читать книжки по алгоритмам, ООП и базам данных, нужен уже какой-то опыт, иначе всё, что там написано, пройдет мимо и забудется.
    Еще часто бывает, что задачи, с которыми сталкиваешься, не описаны в книжках, которые ты прочитал или хотел бы прочитать. Довольно часто решение задачи находится в интернете, а не в книгах. Это я к тому, что нужно начинать с практики и прорабатывать теорию под конкретные задачи. Вот вы написали что-то, вот застряли в каком-то моменте с БД, не знаете, как правильно сделать. Ищете в интернете или в книге, как решается эта проблема и решаете её. В итоге получаете и знание, и опыт, который это знание закрепляет.
    Если вы знаете, куда хотите пойти работать, узнайте, какие там задачи решают и цельтесь сразу туда: составьте себе список таких задач и попытайтесь решить их самостоятельно. И заодно сузите теоретический минимум. Умение решать конкретные задачи намного важнее горы теоретических знаний.
    Ответ написан
    2 комментария
  • Проблема с конфигурацией gem 'factory_girl_rails' and 'rspec-rails' посмотрите плиз что не так?

    Jeiwan
    @Jeiwan
    Старое руководство. Вообще, для гемов в большинстве случаев руководства не нужны: есть репозиторий на github, где всё расписано. Вот, например, репозиторий factory_girl – https://github.com/thoughtbot/factory_girl, вот актуальный cheat sheet – https://github.com/brennovich/cheat-ruby-sheets/bl...

    factory :pool do |f|
      f.name "Ivan"
    end

    Устаревший синтаксис, сейчас не надо передавать переменную в блок, и соответственно поля назначаются напрямую. Скорее всего, ошибка возникает именно из-за этого.

    require 'factory_girl_rails'
    Это теперь тоже не нужно.

    После этого:
    config.include FactoryGirl::Syntax::Methods
    писать FactoryGirl здесь:
    FactoryGirl.create(:pool)
    не нужно. Можно просто `create(:pool)`
    Ответ написан
    Комментировать
  • Насколько быстро можно изучить Ruby on Rails до уровня работы над файлообменником?

    Jeiwan
    @Jeiwan
    Пара-тройка лет. Это если на поверхностном уровне. А так, чтобы разбираться, что там за баги и как их исправить, еще больше. И тут даже не столько знания в программировании нужны, сколько опыт и знание архитектурных решений, а также умение их применять.
    Вообще, как-то все намешано: руби, пхп, питон — как это всё можно было совместить? Какой-то многомодульный проект? Если так, то идея самостоятельно всему этому научиться, а потом еще и развивать, мне кажется утопичной.
    Ответ написан
    Комментировать
  • Как организовать неймспейсы в Rails?

    Jeiwan
    @Jeiwan
    Так если у вас разные неймспейсы, то и представления будут браться из разных папок: для дэшборда — из views/dashboard, а для админа — из views/admin. Так что проблем быть не должно.
    А если вы смешиваете представления, и в разных неймспейсах грузите одни и те же представления, то тут стоит задуматься, а нужно ли так делать. В какой-то момент для одного из неймспейса понадобится сделать свои представления.
    Ответ написан
  • Как переназначить пути моделей в Rails?

    Jeiwan
    @Jeiwan
    Чтобы правильно генерировать пути для вложенных ресурсов, в form_for первым параметром нужно передавать массив:
    form_for [@article, @comment] do
    получится article_comment_path или '/article/:article_id/comment/:id'
    Ответ написан
  • [param is missing or the value is empty: task] Как решить?

    Jeiwan
    @Jeiwan
    param is missing or the value is empty: task

    Экшен ожидает, что придет параметр 'task', но он не приходит. Почему? А потому, что вы его не отсылаете. То есть у вас неправильно оформлена форма. А точнее, у вас вообще формы нету.

    {"authenticity_token"=>"Y8hE4tSk/qUL1xZDpCgvriUwYhmwfzeH3iwfxa7NB+C6DEKkvJLAQ4V3b6yTw4QUxOMPUTxoGKv36PYxpzmCoQ==", "id"=>"10"}

    Вот доказательство, что 'task' не передается.

    if @task.update(task_params)

    Зачем этот апдейт нужен? Какова логика? Зачем обновлять весь таск?

    @task.complete_task = true

    Вообще, так в контроллерах делать не комильфо. С БД должна работать модель. Лучше сделать метод 'complete!' в модели и в контроллере просто вызывать @task.complete!

    Ну и роут не совсем верный.
    post 'tasks/:id/complete', to: 'tasks#complete', as: 'complete_task'
    – так бы было правильнее. Соответственно и экшен переименовать.

    Или если делать ресурс:
    resources :tasks do
      post :complete, on: :member
    end


    Как исправить, думаю, теперь догадаетесь :)
    Ответ написан
    3 комментария
  • Как быстро подтянуть свой уровень веб-разработчика, чтобы соотвествовать требованиям работодателей?

    Jeiwan
    @Jeiwan
    Можно попробовать пойти по тому же пути, по которому вы шли в первый раз — найти компанию, где используют все это JS-многообразие, устроиться туда и обучаться в бою. Вполне вероятно, что могут взять верстальщика на вырост до фронт-эндера, тем более если человек устремлен.
    Фрилансить бы не советовал: та же самая проблема останется — как перейти на следующий уровень. Вы будете брать заказы под свои текущие навыки, а что-то новое брать будет уже страшно, так как не хочется портить репутацию и подводить людей. К тому же, заказчики требуют предыдущий опыт, без которого работу не дают.
    В компании же проще и быстрее всего перейти на тот самый следующий уровень. Вы будете находиться в кругу спецов, будете учиться у них и впитывать, как губка (иначе уволят :)). Вам будет проще брать сложные задачи, так как есть люди, которые помогут, подскажут и подстрахуют. Также в компании проще будет разбираться во всем многообразии инструментов и библиотек, так как в команде уже будет налажен процесс разработки, и вам не придется метаться между ангуляром и бэкбоуном, sass'ом и less'ом, haml'ом и slim'ом и т. д.
    Успехов!
    Ответ написан
    1 комментарий
  • В чем польза изучения PHP сегодня?

    Jeiwan
    @Jeiwan
    Инструмент не имеет значения. Главное — уметь решать им задачи. Если бы на ассемблере можно было успешно создавать веб-приложения, то на нём бы их и создавали.
    Свои плюсы и минусы есть и у ПХП, и у Питона, и у Руби, и у Go, и у вообще всего. В любом языке программирования можно найти людей, которые скажут, что этот язык полное говно, и даже приведут вполне весомые аргументы. Также можно найти людей, которые скажут, что это идеальный язык, и тоже приведут аргументы. Ну и что с того? Какой толк о того, что говорят другие?
    Попробуйте всё, на что хватит времени, и выберете то, что ВАМ больше всего понравится. Ведь это именно ВАМ в будущем целыми днями писать на этом языке код. Если вы решили серьезно этим заниматься, то потратите на это не один год. А зачем тратить время на нелюбимую деятельность?

    ПС Те, кто советуют ему начать "с основ", с C и Java, — вы сошли с ума :)
    Ответ написан
    Комментировать
  • RoR 4, Elasticsearch и searchkick. Как сделать поиск с условием?

    Jeiwan
    @Jeiwan
    @user_array = User.search(query, where: {sex: 'male'})


    Об этом написано в доке гема: https://github.com/ankane/searchkick#queries
    Ответ написан
  • Rails: Как добавить динамический контент в Layout?

    Jeiwan
    @Jeiwan
    Не совсем понятна проблема. Динамический контент и так можно писать в самом application.html.erb, как и в любом шаблоне. Руби код можно вставлять в шаблон внутри тегов <%= %> (с выводом на страницу) или <% %> (без вывода).
    Возможно, вам нужно рендерить шапку через паршиал:
    <%= render 'header' %>
    Этот код включит в место его вызова разметку из файла header.html.erb, лежащего рядом с application.html.erb
    Соответственно, можно подгружать разные паршиалы в зависимости от параметров.
    Ответ написан
  • Поможете вспомнить язык программирования по логотипу?

    Jeiwan
    @Jeiwan
    Единственное, что хоть как-то попадает под описание:
    cover.jpg
    Ответ написан