• Дата в URL повтор, не разобрался?

    @vsuhachev
    У вас какое-то масло масляное. Для того чтобы получить Post достаточно передать его id. Зачем вам в url еще категория и дата мне непонятно. Обычно, если используется url вида site.com/category_name/year/month/day, то он выдает группу объектов, отфильтрованную по категории и дате. Если вам нужно такое поведение - добавляйте в PostsController метод index и заводите такой роут на него.
    Ответ написан
  • Rails, Postgres, Redis и лайки/дизайки?

    @vsuhachev
    Из документации к этому гему:

    To ensure that users' recommendations are processed after they rate items, make sure your bundled queue system is running


    NOTE: Your Redis database MUST be persistent. All ratings are stored permanently in Redis. If you're worried about Redis losing data, keep backups.


    Фоновая задача нужна для того чтобы обновлять связи внутри хранилища Redis. Или можно вызывать обновление вручную (см. davidcel.is/recommendable/#manually-generating-rec...)

    UPD: В итоге оказалось что все хранится в Redis
    Ответ написан
    2 комментария
  • Rails мультисайт?

    @vsuhachev
    Во-первых научитесь задавать вопросы. Что такое "мультисайт"? Гугл не гуглит ничего вразумительного по этому слову.

    По теме:
    Хочется иметь одну админку на несколько сайтов, разные базы, вьюхи

    разные базы - теоретически это возможно, но практически неудобно (и не имеет особых примуществ). С разными БД ваше приложение должно обладать расширенными правами для создания этих баз, создания пользователей и выдачей им прав. Если предположить, что таблицы в каждой БД будут отличаться, то тогда как с этим будет работать общий код приложения?

    Поэтому проще иметь одну заранее созданную базу c универсальной структурой таблиц, в каждой таблице колонку site_id и фильтровать все данные по этой колонке.

    Разные вьюхи - это делается достаточно просто с помощью prepend_view_path

    class ApplicationController < ActionController::Base
      before_action :detect_site
    
      def detect_site
        @current_site = Site.find_by(host: request.host)
        prepend_view_path "app/views/sites/#{@current_site.name}"
      end
    
      helper :current_site
    end


    Если хотите хранить шаблоны в БД - поглядите panoramic
    Ответ написан
  • Как прогнать массив через routes.rb в Rails4?

    @vsuhachev
    Вы в URLe массив не сможете передать без дополнительных телодвижений

    обычно в Рельсах массивы передаются в параметрах как-то так:
    http://myurl?array_name[]=7&array_name[]=8
    Ответ написан
    Комментировать
  • В каком виде реализовать асинхронную админ панель для RoR?

    @vsuhachev
    С готовыми решениями вроде rails_admin быстро упираешься в их ограничения и либо нужно начинать их дописывать самому, либо отказываться. Тут на ваш выбор. Я пришел к тому, что все-таки проще пользоваться скаффолдом со своими шаблонами. Шаблоны обычно подгоняю под конкретный проект.
    Ответ написан
    Комментировать
  • Какое ПО написано на Ruby?

    @vsuhachev
    Навскидку Sass, Chef, Metasploit
    Ответ написан
    Комментировать
  • Как распарсить данные с помощью React.js?

    @vsuhachev
    Вообще динамические шаблоны и реакт не очень совместимы т.к. реакт использует виртуальный DOM и не ожидает от вас того что вы будете что-то менять в реальном DOM

    Видимо один из возможных путей - переписать шаблоны под react-style и компилить их в js-код. Код будет выглядеть как-то так:
    function template() {
    	            return react.createElement(
    	                'div',
    	                null,
    	                react.createElement(
    	                    'h1',
    	                    { className: 'text-danger' },
    	                    'Page not found'
    	                ),
    	                react.createElement(
    	                    'p',
    	                    null,
    	                    'This page does not exist'
    	                )
    	            );
    	        }


    Потом грузить его динамически и выполнять, а результат вставлять куда-то во внутрь обычных компонентов.
    Но это как мне видится просто адский гемор, как минимум все зависимости (react и т.п.) каким-то образом должны быть видны из вашего шаблона, скорее всего их придется вытащить в глобальные переменные.
    Ответ написан
    Комментировать
  • Rails 4 asset pipeline - как настроить области видимости?

    @vsuhachev
    Ответ написан
    Комментировать
  • Необходимо выбрать на какой технологии делать веб сервис?

    @vsuhachev
    На всех указанных вами языках (и еще java) можно сделать вашу задачу. Все они в мейнстриме, явных аутсайдеров нет. Дальше уже выбираете язык на свой вкус, так чтобы было приятно и интересно работать.

    Например так:

    1) открываете гугл
    2) пришите "rest api %lang% example"
    3) читаете, пробуете, оцениваете, если не понравилось переходите к пп 1)
    4) ???
    5) PROFIT
    Ответ написан
    Комментировать
  • Гем Devise ( devise_parameter_sanitizer ) не работает или я что-то не понимаю?

    @vsuhachev
    Нет не должен. Оно только отрезает все не указанные параметры. И насчет тегов - в рельсах все строки по умолчанию безопасные, перед отдачей автоматом эскейпятся, если явно не указать обратное. Т.е. в вашем случае можно все оставить так как есть сейчас.
    Ответ написан
    1 комментарий
  • Как сменить/выбрать город в React.js c Redux в RoR?

    @vsuhachev
    Вообще правильный RESTful не должен зависеть от кукисов и сессии.

    Соответственно город лучше хранить на клиенте в localStorage. При загрузке дополнительной информации нужно указывать его параметром в запросе.
    Ответ написан
    8 комментариев
  • Популярен ли typescript среди ROR разработчиков?

    @vsuhachev
    Я лично вообще не вижу особого смысла в строгой типизации на JS, а остальные фичи есть и в Coffee и тем более в ES6, который - грядущий стандарт.
    Ответ написан
  • Как reduсers обрабатывает данные в React Redux?

    @vsuhachev
    Редуцер должен возвращать объекты/хэши, а не так как у вас массивы.

    Весь этот синтаксис { ...state, loading: true} означает: Возьми пустой объект, скопируй туда все содержимое state, а потом переопредели следующие ключи (loading и т.д.)

    export default function company(state = defaultState, action) {
      switch (action.type) {
    
        case LOAD_REQUESTED:
          return {
            ...state,
            loading: true
          };
    
        case LOAD_OK:
          return {
            ...state,
            loading: false,
            counter: action.counter,
            app: action.app,
            errors: null
          };
    
        default:
          return state;
      }
    }
    Ответ написан
    2 комментария
  • Как запускать rake по cron?

    @vsuhachev
    проблема в том что у крона свое окружение, например в PATH нет пути ни к ruby ни к bundle, shell другой и т.п. Правильный путь - написать свой скрипт так чтобы все умолчания были явными - полные пути, инициальзация переменных окружения и т.д.

    Более простой путь - попытаться запустить ваш шелл с опцией логина и выполнить в нем нужную команду. Например у меня на убунту работало так
    sudo -u my_user /bin/bash -l -c 'bundle exec ...'
    Не берусь судить о том насколько это "тру" - возможно знающие люди прокомментируют...
    Ответ написан
    Комментировать
  • Код js подключается 2 раза в application.js и в своем файле(?

    @vsuhachev
    во первых имеет значение в каком вы окружении, в development такое поведение нормально, а ассеты для production собираются с помощью задачи assets:precompile

    во вторых, по умолчанию в манифесте (application.js) обычно есть команда require_tree, которая включает все файлы из подкаталогов, т.е. require somecode не нужен

    почитайте вот тут как это все работает
    Ответ написан
  • Проблема с rspec. Что делать?

    @vsuhachev
    Пройдите нулевое задание для начала, там поймете что нужно делать дальше
    Ответ написан
  • Как сделать правильно ajax запрос в React Redux?

    @vsuhachev
    Т.к. ajax запросы асинхронные то на каждый такой запрос делается 3 ветки развития событий:
    • запрос отправлен
    • запрос завершился успешно
    • запрос завершился с ошибкой


    В коде это будет выглядеть как-то так
    export function loadInfo() {
        return dispatch => {
    
            dispatch({
                type: 'LOAD_INFO_REQUESTED'
            });
    
            request.get(
                Routes.root_path(),
                {headers: {'Accept': 'application/json'}}
            )
                .then(result => {
                    dispatch({
                        type: 'LOAD_INFO_OK',
                        info: result.data
                    })
                })
                .catch(result => {
                    dispatch({
                        type: 'LOAD_INFO_FAIL',
                        errors: result.statusText
                    })
                })
        }
    }

    Т.е. сначала экшн оповещает хранилище(store) что начал запрос и делает сам запрос. Далее в зависимости от результата хранилище будет оповещено либо от успехе либо об неудаче.
    Чтобы получить доступ к dispatch внутри экшена используется redux-thunk, который вы уже установили.

    Далее редуцер, обрабатывается 3 типа событий из экшена
    const defaultState = { loading: false, info: null, errors: null };
    
    export default function info(state = defaultState, action) {
      switch (action.type) {
    
        case LOAD_INFO_REQUESTED:
          return { loading: true };
    
        case LOAD_INFO_OK:
          return { loading: false, info: action.info, errors: null };
    
        case LOAD_INFO_FAIL:
          return { loading: false, info: null, errors: action.errors };
    
        default:
          return state;
      }
    }


    Компонент должен быть подключен к хранилищу с помощью connect, без него компонент не увидит store
    @connect(state => ({
        info: state.info
    }))
    
    class Info extends Component {
    
        componentDidMount() {
            const { dispatch } = this.props;
            dispatch(loadInfo()) // Вызываем загрузку
        }
    
      render() {
        const { loading, info, errors } = this.props.info;
    
        if (loadind) { return (<div>Loading</div>) }
        if (errors != null) { return (<div>Error!</div>) }
        return (
          <div>
            { info }
          </div>
        );
      }
    }


    Вобщем как-то так. В хэлпе на redux это все описано.
    Ответ написан
    5 комментариев
  • Как правильно отсортировать коллекцию ActiveRecord?

    @vsuhachev
    Есть acts_as_list для управления порядком в списках, рекомендую
    Ответ написан
    Комментировать
  • Как в Rails при запросе .group().count показывать только количество?

    @vsuhachev
    Вот поглядел на ответ про count с параметрами и стало интересно, чего я не знаю про count. Оказалось (в 4 рельсах) что
    Subscriber.count(:all, :group => 'id')
    достаточно бессмысленное выражение и эквивалентно Subscriber.count. Чтобы в этом убедится достаточно почитать сырцы, кстати в 5 рельсах второй параметр из count уже выпилили...
    Ответ написан
    Комментировать
  • Как получить state из другого компонента в React.js?

    @vsuhachev
    Касаясь общего вопроса - компоненты для этого и сделали компонентами, чтобы инкапсулировать их поведение, иначе будет опять всеми любимый спагетти-код. Рекомендую все же потратить время на освоение flux, это однозначно нужная вещь. Можно начать с этой статьи. Ну и redux заслуживает внимания - это одна из реализаций концепции flux.
    Ответ написан