LINUX.ORG.RU

Ruby on Rails роутинг

 


0

1

Прошлая тема rails routes переменные не дала ответа, попробую перефразировать.

И так есть 2 урла

http://test.ru?var=test1
http://test.ru?var=test2

Нужно в RoR первый урл обработать методом одного контроллера, а второй урл обработать методом другого контроллера. То есть отправлять запрос на разные контроллеры в зависимости от значения var. Как это можно сделать?

★★★★★

Последнее исправление: CYB3R (всего исправлений: 2)

А зачем так делать? Чем плохо в хендлере в зависимости от значения параметра выполнять ту или иную логику?

Hater ★★
()
Ответ на: комментарий от Hater

А зачем так делать? Чем плохо в хендлере в зависимости от значения параметра выполнять ту или иную логику?

В каком хендлере? Нужно в разных контроллерах потому что логики очень много и она абсолютно разная для этих двух урлов.

TDrive ★★★★★
() автор топика
Ответ на: комментарий от Hater

Кстати, такие темы лучше создавать в Web-development.

Затупил, перенесите кто может.

TDrive ★★★★★
() автор топика

В прошлой теме тебе сказали, как это сделать. Или для тебя принципиально, чтобы диспетчеризация была в routes.rb?

Apple-ch ★★
()
Ответ на: комментарий от Apple-ch

В прошлой теме тебе сказали, как это сделать. Или для тебя принципиально, чтобы диспетчеризация была в routes.rb?

Мне пренципиально чтобы разные контроллеры обрабатывали эти урлы. В прошлой теме я ответа не вижу.

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

Ну можно например сделать редирект на правильные урлы. Ну или там в веб-сервере можно сделать rewrite наверное.

Hater ★★
()
Ответ на: комментарий от Hater

Ну можно например сделать редирект на правильные урлы. Ну или там в веб-сервере можно сделать rewrite наверное.

редирект нельзя потому что параметры get/post теряются.

TDrive ★★★★★
() автор топика

думаю, что ты понимаешь, что это все очень криво)

можно настроить проксю перед рельсами, чтобы получались нормальные урлы. или сделал бы фильтр в ApplicationController и редиректил куда надо.

kelyar ★★★★★
()
Ответ на: комментарий от TDrive

Упс, май бэд, действительно вменяемого ответа нет.

Давай я попробую помочь. Количество параметров ограничено и заранее известно?

Apple-ch ★★
()
Ответ на: комментарий от Apple-ch

Давай я попробую помочь. Количество параметров ограничено и заранее известно?

Нет. зарание известны только возможные значения параметра var причем он может быть и как пост и как гет.

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

Я это и имел в виду. Если список вызываемых контроллеров/экшнов заранее известен, то проще всего использовать констрейнты:

class VarConstraint
  def initialize(value)
    @value = value.to_s
  end

  def matches?(request)
    request.params[:var] == @value
  end
end

И прописать для каждого значения вот так:

Rails.application.routes.draw do
  get '/', constraints: VarConstraint.new(:test1), to: Test1Controller.action('test1')
  get '/', constraints: VarConstraint.new(:test2), to: Test2Controller.action('test2')
end
Apple-ch ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.