Ответы пользователя по тегу Ruby on Rails
  • Как получить пользователя через api devise?

    alexfedoseev
    @alexfedoseev
    React & Rails Dev
    Вам нужно настроить аутентификацию по токену. Devise отказался от поддержки таковой, поэтому приходится танцевать с бубнами.

    Как это должно работать в теории. Пользователь при регистрации отправляет POST с логином/паролем. Devise создает пользователя и параллельно присваивает ему токен (токен != пароль). В ответе он отдает именно этот токен, который вы должны сохранить где-то на клиенте. При каждом запросе от клиента к рельсам вы должны передавать этот токен в http-заголовке, чтобы Devise по этому токену аутентифицировал пользователя.

    Дальше покопайте доки этого гема: https://github.com/gonzalo-bulnes/simple_token_aut...
    Ответ написан
  • Как правильно организовать древовидную структуру в Rails4?

    alexfedoseev
    @alexfedoseev
    React & Rails Dev
    А ещё лучше сюда:
    https://www.railstutorial.org/book
    railstutorial.ru
    Ответ написан
    Комментировать
  • Использование хелперов главного приложения в представлениях mountable engine

    alexfedoseev
    @alexfedoseev Автор вопроса
    React & Rails Dev
    В общем, вот так вроде заработало:

    lib/my_engine/engine.rb (это внутри engine)
    module MyEngine
      class Engine < ::Rails::Engine
        isolate_namespace MyEngine
        config.to_prepare do
          ApplicationController.helper(ActionView::Helpers::ApplicationHelper)
        end
      end
    end


    P.S. Тот include убил соответственно.
    Ответ написан
  • Генерация (render) формы редактирования nested объекта через ajax (с jquery-fileupload-rails)?

    alexfedoseev
    @alexfedoseev Автор вопроса
    React & Rails Dev
    В общем, так и не поняв как мне эту f передать в этот партиал (насколько я могу судить её и не передать), я решил пойти путём воссоздания этого партиала «руками».

    Во-первых, я создал отдельный партиал для ajax-вставки (я даю сразу результат, ниже поясняю откуда в нём появились переменная @building и хелпер building_nested_model_count):

    views/admin/buildings/_form_building_views_ajax.html.haml
    .form-element-container
      .form-element.b-form-labels= image_tag(@building_view.image_url(:thumb)) if @building_view
    
      .form-element.b-form-fields= text_field_tag "building[building_views_attributes][#{building_nested_model_count(@building_view, @building)}][title]", nil, placeholder: 'Title'
    
    = hidden_field_tag "building[building_views_attributes][#{building_nested_model_count(@building_view, @building)}][id]", @building_view.id


    В нём я просто воссоздал форму, которую мне нужно добавить через ajax (rails с помощью хелперов её генерит автоматом, а я сгенерил её руками). Для того, чтобы оно заработало мне нужно внести изменения в три файла:

    1. Определяем переменную @building

    controllers/admin/building_views_controller.rb
    class Admin::BuildingViewsController < ApplicationController
    
      def create
        @building_view = BuildingView.create(building_view_params)
        @building = @building_view.building # определяем @building
      end
    
      private
    
        def building_view_params
          params.require(:building_view).permit(:building_id, :image)
        end
    
    end


    2. Для хэша params в полях id и name формы присутствует индекс для каждого BuildingView (см. в ajax-партиал), рассчитаем его с помощью хелпера:

    helpers/admin/building_views_helper.rb
    module Admin::BuildingsHelper
    
    	def building_nested_model_count(nested_var, building)
    		nested_class = nested_var.class
    		nested_class.where(building_id: building.id).count
    	end
    
    end


    3. И наконец изменим партиал для рендера:

    views/admin/building_views/create.js.haml
    - if @building_view.new_record?
      == alert('Oops!');
    - else
      == $('#building_views').append('#{j render('admin/buildings/form_building_views_ajax')}');


    Я в силу небольшого опыта не понимаю: костыль это или решение задачи (с удовольствием послушаю мнения). Но оно работает: форма для нового BuildingView рендерится, его отредактированный title сохраняется.
    Ответ написан
    Комментировать