2016-07-22 13 views
1

habe ich FullcalendarEngine in meinem routes.rb montiert:Wie bekomme ich URL_für die Arbeit mit einem Modul?

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

Leider, obwohl ich dies in routes.rb haben:

resources :events, module: 'fullcalendar_engine' 

und die erzeugten Routen:

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 

Ich kann immer noch nicht url_for damit verwenden (was ich tun muss, damit es mit will_paginate funktioniert):

Fehler:

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"}

Wenn ich die Routen des Moduls prüfen:

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"}] 

Hinweis hat dies:

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

Beachten Sie den Namespace für den Controller-Wert. Dies funktioniert nicht:

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

Aber wenn ich versuche, es zu Namensraum, gibt es diesen Fehler:

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 

Auch das Hinzufügen eines Hosts erzeugt die falsche url:

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

Wie kann Ich bekomme url_for, um die Route zu erkennen?

Antwort

0

Ihre Routen erwarten einen id Parameter, so müssen Sie es eine geben:

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

, Zusätzlich werden die Routen, die Sie gebucht haben für die index eine Route nicht enthalten, so existieren sie nicht. Wenn dies der Fall wäre, würde es wahrscheinlich keine id

+0

Eigentlich habe ich ursprünglich nicht alle Routen gebucht. Es gibt tatsächlich eine Indexroute. Ich habe die Frage aktualisiert. – Donato

Verwandte Themen