обслуживать статические представления из подкаталогов с помощью одного контроллера в rails 4

Если есть несколько статических страниц в древовидной структуре. Те, что на первом уровне, обслуживаются с помощью static_pages_controller.rb, а в моем route.rb у меня есть:

get '/static_pages/news'  , :to => 'static_pages#news'  , :as => 'news'
get '/static_pages/index' , :to => 'static_pages#index' , :as => 'index'
....

Вышеперечисленное существует в

app\views\static_pages\news.html.erb
app\views\static_pages\index.html.erb
....

Теперь я вставил несколько других статических страниц в корень static_pages:

app\views\static_pages\ermis\news.html.erb
app\views\static_pages\ermis\index.html.erb
....

Я добавил в route.rb это:

get '/static_pages/ermis/news'  , :to => 'static_pages#news'    , :as => 'news'
get '/static_pages/ermis/index' , :to => 'static_pages#index'   , :as => 'index'

Вышеупомянутое не работает, потому что действия уже существуют (родительские папки). Поэтому я пошел на болезненный шаг переименования файлов в (хотя должен быть лучший способ?!?)

app\views\static_pages\ermis\ermisnews.html.erb
app\views\static_pages\ermis\ermisindex.html.erb
....

и мой route.rb стал

get '/static_pages/ermis/news' , :to => 'static_pages#ermisnews' , :as => 'ermisnews'
get '/static_pages/ermis/index', :to => 'static_pages#ermisindex', :as => 'ermisindex'
....

контроллер пуст

class StaticPagesController < ApplicationController
end

Почему страницы не обслуживаются? что мне не хватает?

Когда я нажимаю на

<%= link_to("Ermis", ermisnews_path, class: 'pictureTitle') %>

я получил

"The action 'ermisnews' could not be found for StaticPagesController"

Здесь мои маршруты.rb

Prefix Verb    URI Pattern                                Controller#Action
root           GET    /                                   static_pages#index
ermisindex     GET    /static_pages/ermis/index(.:format) static_pages#ermisindex
ermisnews      GET    /static_pages/ermis/news(.:format)  static_pages#ermisnews
news           GET    /static_pages/news(.:format)        static_pages#news
index          GET    /static_pages/index(.:format)       static_pages#index

ПРИМЕЧАНИЕ. Я не получаю сообщения об ошибке при использовании ссылки, напрямую указывающей на файлы .erb на static_pages.

<%= link_to("News"     , news_path          , class: 'pictureTitle')

Question: 
1) How can I use the same controller to also serve static pages underneath /static_pages eg. /static_pages/ermis 
2) Am I obliged to actually rename the files to have them represent unique actions?

person Yios    schedule 26.08.2014    source источник


Ответы (2)


В route.rb измените маршруты как:

  resources :static_pages do

    resources :ermis do

      get 'ermisnews' , :on => :collection

    end

  end

  match '/ermisnews'  => 'static_pages#ermisnews', :as => :news

А потом запустить рейк роуты.

person user3189916    schedule 26.08.2014
comment
В моем приложении ermis не является подресурсом static_pages. - person Yios; 26.08.2014

В итоге нашел решение своей проблемы:

  1. создал следующее пространство имен:

    пространство имен :sp do ресурсы: ixanos ресурсы: ermis end

  2. создал следующие контроллеры

    class Sp::IxanosController ‹ Конец ApplicationController

    class Sp::ErmisController ‹ Конец ApplicationController

  3. Поместил контроллеры в app/controllers/sp/

  4. Создал каталоги app/views/sp/ixanos и app/views/sp/ermis и скопировал в них свои файлы.

(*) Таким образом, я могу иметь столько статических страниц, сколько захочу, под заданными корнями (ermis и ixanos). Я не проверял ситуацию, когда у меня будут подкаталоги вроде sp/ermis/dir1/dir2...

person Yios    schedule 27.08.2014