2016-07-22 2 views
1

я установил FullcalendarEngine в моем routes.rb:Как получить url_for работы с модулем?

mount FullcalendarEngine::Engine , at: "/fullcalendar_engine" 

К сожалению, даже если у меня есть это в routes.rb:

resources :events, module: 'fullcalendar_engine' 

И сгенерированные маршруты:

fullcalendar_engine_path     /fullcalendar_engine  FullcalendarEngine::Engine 
events_path      GET   /events/index(.:format)  fullcalendar_engine/events#index 
event_path      GET   /events/:id(.:format)  fullcalendar_engine/events#show 
events_path      GET   /events(.:format)   fullcalendar_engine/events#index 
           POST  /events(.:format)   fullcalendar_engine/events#create 
new_event_path     GET   /events/new(.:format)  fullcalendar_engine/events#new 
edit_event_path     GET   /events/:id/edit(.:format) fullcalendar_engine/events#edit 
event_path      GET   /events/:id(.:format)  fullcalendar_engine/events#show 
           PATCH  /events/:id(.:format)  fullcalendar_engine/events#update 
           PUT   /events/:id(.:format)  fullcalendar_engine/events#update 
           DELETE  /events/:id(.:format)  fullcalendar_engine/events#destroy 

Я все еще не могу использовать url_for с ним (что мне нужно сделать, чтобы заставить его работать с will_paginate):

Ошибка:

RailsDevise::Application.routes.url_for({ controller: 'events', action: 'index'}) => ActionController::UrlGenerationError: No route matches {:action=>"index", :controller=>"events"} FullcalendarEngine::Engine.routes.url_for({ controller: 'events', action: 'index'}) => ActionController::UrlGenerationError: No route matches {:action=>"index", :controller=>"events"}

Когда я проверить маршруты модуля,:

FullcalendarEngine::Engine.routes.routes.collect {|journey| journey.defaults } 
=> [{:controller=>"fullcalendar_engine/events", :action=>"index"}, {:action=>"get_events", :controller=>"fullcalendar_engine/events"}, {:action=>"move", :controller=>"fullcalendar_engine/events"}, {:action=>"resize", :controller=>"fullcalendar_engine/events"}, {:action=>"index", :controller=>"fullcalendar_engine/events"}, {:action=>"create", :controller=>"fullcalendar_engine/events"}, {:action=>"new", :controller=>"fullcalendar_engine/events"}, {:action=>"edit", :controller=>"fullcalendar_engine/events"}, {:action=>"show", :controller=>"fullcalendar_engine/events"}, {:action=>"update", :controller=>"fullcalendar_engine/events"}, {:action=>"update", :controller=>"fullcalendar_engine/events"}, {:action=>"destroy", :controller=>"fullcalendar_engine/events"}] 

Уведомление он имеет следующее:

@defaults={:controller=>"fullcalendar_engine/events", :action=>"index"} 

Обратите внимание на пространство имен для значения контроллера. Это не работает:

FullcalendarEngine::Engine.routes.url_for({:controller=>"events", :action=>"index"}) 
ActionController::UrlGenerationError: No route matches {:action=>"index", :controller=>"events"} 

Но если я пытаюсь пространство имен, он дает эту ошибку:

FullcalendarEngine::Engine.routes.url_for({:controller=>"fullcalendar_engine/events", :action=>"index"}) 
ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true 

Даже добавление узла создает неправильный URL:

FullcalendarEngine::Engine.routes.url_for({:controller=>"fullcalendar_engine/events", :action=>"index", host: "localhost"}) 
=> "http://localhost/fullcalendar_engine/" 

Как может Я получаю url_for, чтобы узнать маршрут?

ответ

0

Ваши маршруты ожидают id параметр, так что вы должны дать ему одно:

url_for(controller: 'events', action: 'show', id: 5) # < Notice the `id` 

Кроме того, маршруты, которые вы размещены не включают в маршрут для index, поэтому он не может существовать. Если бы это было так, это, вероятно, не потребовало бы id

+0

На самом деле я изначально не опубликовал все маршруты. Существует действительно индексный маршрут. Я обновил вопрос. – Donato

Смежные вопросы