Как разделить вложенные маршруты в Рода - PullRequest
0 голосов
/ 03 июня 2018

Я пишу приложение, используя Roda.У меня есть такой вложенный маршрутизатор:

   route 'chats' do |r|
      env['warden'].authenticate!
      r.is do
        @current_user = env['warden'].user

        r.get do
          # code is here
        end

        r.post do
          # code is here
        end
      end

      r.on :String do |chat_id|
        r.is 'messages' do
          # code is here

          r.get do
            # code is here
          end

          r.post do
            # code is here
          end
        end
      end
    end

Я хочу разделить один большой кодовый блок на два маршрута, как это:

route 'chats' do |r|
  # code is here
end
route 'chats/:chat_id/messages' do |r, chat_id|
  # code is here
end

Пожалуйста, помогите.Как это сделать правильно?

1 Ответ

0 голосов
/ 04 июня 2018

Вам необходимо включить 2 плагина:

  • multi_route - чтобы разрешить разбиение маршрутов между отдельными файлами,
  • shared_vars - дляпередать переменные по маршрутам.

Затем на самом высоком уровне объявить маршруты следующим образом:

  # routes/root.rb
  class YourApp::Web
    route do |r|
      r.on('chats') do
        r.is do
          r.route 'chats'
        end

        r.is(String, 'messages') do |chat_id|
          shared[:chat_id] = chat_id
          r.route 'chats_messages'
        end
      end
    end
  end

После этого вы можете поместить чаты и chats_messages в отдельные файлы:

  # routes/chats.rb
  class YourApp::Web
    route ('chats') do |r|
      r.get do
        # ....
      end

      r.post do
        # ....
      end
    end
  end

  # routes/chats_messages.rb
  class YourApp::Web
    route ('chats_messages') do |r|
      chat_id = shared[:chat_id]
      r.get do  
        # ....
      end

      r.post do  
        # ....
      end
    end
  end

Может быть, есть и другое решение.Я поделился тем, что сработало для меня.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...