Отдельный маршрут двигателя Rails

Я создал простое приложение с новостным модулем и обозначил новости как отдельный монтируемый движок (он будет использоваться и в других проектах). Мне нужна возможность монтировать административную и пользовательскую части движка как отдельные маршруты в родительском приложении. Теперь я могу установить весь двигатель как

Rails.application.routes.draw do
     mount Jnews::Engine => "/news"
end

но я хочу разделить маршруты администратора и пользователя в родительском приложении как /news для пользователя и /admin/news для администраторов. Это возможно?


person javidan    schedule 16.08.2012    source источник


Ответы (1)


Я думаю, это зависит от того, почему вы хотите это сделать:

  1. Если вы хотите, чтобы пользователи и администраторы были отдельным кодом в геме новостей, то вы, вероятно, захотите изолировать 2 пространства имен, а затем смонтировать каждое из них, что может потребовать их использования в качестве отдельных движков.

  2. Если то, что вы хотите (и это то, что, я думаю, вы имеете в виду?), Чтобы код был общим в движке новостей, но доступ к нему осуществлялся по двум разным URL-адресам в основном приложении в зависимости от того, является ли пользователь обычным пользователем или администратором? Что бы я сделал в этом случае, что-то вроде этого:

в основном приложении

Rails.application.routes.draw do
   mount Jnews::Engine => "/app"
end

в маршрутах двигателя

Jnews::Engine.routes.draw do
    match "/news", :to => "some_controller#some_action"
    match "/admin/news", :to => "some_controller#some_action"
end

И затем в основном приложении, в зависимости от того, какой пользователь (пользователь или администратор), вы можете перенаправить на app/news или app/admin/news.

Я надеюсь, что это поможет, я не совсем уверен в выполнении условной маршрутизации.

Однако вот действительно хорошее руководство по маршрутизации: http://guides.rubyonrails.org/routing.html< /а>

Возможно, вы могли бы попробовать что-то вроде установки движка с динамической маршрутизацией?

mount Jnews::Engine => ":user_id/news"

где вы в конечном итоге получите Jnew::Engine, маршрутизируемый либо в user/news, либо в admin/news? На самом деле я никогда этого не делал, поэтому я не знаю, возможно ли это, однако... может быть?

Дайте мне знать, если что-то из этого поможет :) Ура

person Krista    schedule 24.08.2012