Ответы пользователя по тегу Ruby on Rails
  • Проблема с конфигурацией 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 комментария
  • 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
    Соответственно, можно подгружать разные паршиалы в зависимости от параметров.
    Ответ написан
  • Как вывести записи с определенным значением(из select)?

    Jeiwan
    @Jeiwan
    1. Посылаем запрос при выборе элемента из селекта:
    collection_select(:ad, :city_id, City.all, :id, :name, {prompt: 'Выберете город...'}, data: {remote: true, type: :json, url: ads_path})

    Запрос уходит на ads_path (то есть экшн index контроллера ads), id города передается в параметре ad[city_id].

    2. В экшене возвращаем список объявлений города:
    respond_to :json
    def index
      @city = City.find(params[:ad][:city_id])
      respond_with @ads = @city.ads
    end


    3. На js ловим ответ сервера с данными:
    $ ->
      $("#ad_city_id").on "ajax:success", (e, data, status, xhr) ->
        objects = xhr.responseJSON

    В переменной objects будут находиться объявления, которые мы потом рендерим на страницу. То есть вся работа по выводу объявлений на страницу переносится на клиент, т.е. js. Очень удобно это делать с помощью гема handlebars_assets и, соответственно, шаблонов в формате handlebars. Отдавать красивый json можно с помощью гема jbuilder.
    Ответ написан
  • Как посчитать протестировать количество строк в таблице?

    Jeiwan
    @Jeiwan
    При разработке и тестировании используются две разные базы данных. То есть в базе для разработки у вас в таблице есть 5 записей, а база для тестирования пустая. Настройки баз данных можно посмотреть в config/database.yml
    При тестировании обычно используются фабрики (factories, гем factory_girl), с помощью которых перед каждым тестом база данных заполняется необходимыми записями. В вашем случае перед каждым тестом в тестовой бд нужно создавать 5 записей (можно другое количество, бд для тестирования никогда не совпадает с бд для разработки). Поищите в интернете статьи о тестировании с помощью factory_girl.
    Еще у вас не совсем верно написан селектор для тестов, так как он находит заголовок таблицы. Чтобы решить эту проблему, в верстке можно заголовочный ряд таблицы обернуть в тег thead а ряды с данными в тег tbody и добавить tbody в селектор: "table#charges_failed tbody tr".
    Ответ написан
    1 комментарий
  • Почему не срабатывает update в PG?

    Jeiwan
    @Jeiwan
    А updated_at обновляется?
    Вызывает подозрение запятые после Wed:
    SQL (0.9ms) UPDATE "subscribers" SET "last_login_at" = $1, "updated_at" = $2 WHERE "subscribers"."id" = 65307 [["last_login_at", Wed, 06 Aug 2014 04:23:04 UTC +00:00], ["updated_at", Wed, 06 Aug 2014 04:23:04 UTC +00:00]]

    И вообще формат даты странный. Попробовал у себя обновить updated_at с Time.now:
    SQL (0.6ms) UPDATE "sellers" SET "updated_at" = $1 WHERE "sellers"."id" = 1 [["updated_at", "2014-08-06 19:54:19.893449"]]
    Ответ написан
  • Как настроить pluralization в Rails I18n?

    Jeiwan
    @Jeiwan
    Вот ответ: stackoverflow.com/questions/6166064/i18n-pluralization
    Нужно задать правило плюразилации для русского языка и всё заработает:
    2.1.2 :001 > I18n.locale = :ru
     => :ru 
    2.1.2 :002 > I18n.t 'validate_errors.error', count: 1
     => "Форма содержит 1 ошибку" 
    2.1.2 :003 > I18n.t 'validate_errors.error', count: 2
     => "Форма содержит 2 ошибки" 
    2.1.2 :004 > I18n.t 'validate_errors.error', count: 3
     => "Форма содержит 3 ошибки" 
    2.1.2 :005 > I18n.t 'validate_errors.error', count: 4
     => "Форма содержит 4 ошибки" 
    2.1.2 :006 > I18n.t 'validate_errors.error', count: 5
     => "Форма содержит 5 ошибок" 
    2.1.2 :007 > I18n.t 'validate_errors.error', count: 10
     => "Форма содержит 10 ошибок" 
    2.1.2 :008 > I18n.t 'validate_errors.error', count: 22
     => "Форма содержит 22 ошибки" 
    2.1.2 :009 > I18n.t 'validate_errors.error', count: 21
     => "Форма содержит 21 ошибку"
    Ответ написан
    1 комментарий