2016-06-14 12 views
1

in meiner routes.rb-Datei vorhanden Ich haben eine Ressource:Schienen Hinzufügen von benutzerdefinierter Route Ressource

resources :authentication 

aber ich möchte auch eine eigene Route erstellen, so dass ich habe folgende unter der früheren Leitung:

scope :authentication do 
    get 'is_signed_in', to: 'authentication#is_signed_in?' 
end 

und ich lief bin/rake routes

und mein Controller hat dieses:

class AuthenticationController < ApplicationController 
    def is_signed_in? 
    if user_signed_in? 
     render :json => {"signed_in" => true, "user" => current_user}.to_json() 
    else 
     render :json => {"signed_in" => false}.to_json() 
    end 
    end 
end 

jedoch, wenn ich versuche, diesen Weg ich einen halten den Zugriff bekommen 404. Dies ist, wie ich Zugriff versucht bin:

$.ajax({ 
    method: "GET", 
    url: "/authentication/is_signed_in.json" 
}) 

bin ich etwas fehlt? muss ich etwas Besonderes tun, um eine Route mit einer .json Erweiterung zu ermöglichen?

Antwort

1

Sie müssen scope hier nicht verwenden. Fügen Sie einfach die folgende vor die Zeile mit resources :authentication:

get 'authentication/is_signed_in', to: 'authentication#is_signed_in?' 

Alternativ und vielleicht mehr kanonisch (see the docs), können Sie mehr Aktion auf eine bestimmte Ressource wie folgt hinzu:

resources :authentication do 
    get 'is_signed_in', on: :collection 
end 

jedoch In diesem Fall müssen Sie möglicherweise den Namen der is_signed_in?-Methode in Ihrer AuthenticationController zu is_signed_in (ohne die ? am Ende) ändern.

+0

Also die zweite Option erstellt die 'Ressourcen', und mit' do' kann ich zusätzliche optionale Routen zuweisen? –

+0

Grundsätzlich ja. Aber jetzt habe ich gesehen, dass die Methode "get" im Block "Ressourcen" unvollständig ist. Es muss auch "on:: sammlung" haben, um richtig zu funktionieren. Ich habe meine Antwort erneut bearbeitet. –

Verwandte Themen