2016-03-28 6 views
0

Ich verwende Zeichenfolge als ID in Routen (zB Ressource /: ID), aber ID kann auch 'neu' (eine Methode in meinem Controller), anstatt die Ressource mit ID = neu, leitet neue Ressourcen ein. Wie kann ich Benutzer davon abhalten, id = new zu wählen, während sie eine neue Ressource erstellen?Rails: ID-Konflikt mit einer Methode zu verhindern

+0

fügen Sie ein ': before_filter: check_new,: nur => [ : new] '& verhindere die Weiterleitung an neue Aktion. –

Antwort

2

Ich kann mich drei Lösungen, bei denen Sie Zeichenfolge anstelle von id

Ersten einstellen: setzt eine Kombination aus der ID und dem attribute_name, füge in Ihrem Modell

Zweitens: verhindern den Benutzer des Hinzufügens einer Aktionsmethode in Ihrem Controller (das ist sicherer t nur die "neue" Methode han beschränken, können Sie andere get-Methoden in der Zukunft hinzufügen)

validates :attr_name, exclusion: { in: YourController.action_methods.to_a } 

Drittens: Verwendung friendly_id gem

+0

Vielen Dank! Ich schätze es sehr, dass Sie Beispielcode gegeben haben. –

1

In config.rb, die Route ändern:

resources :resources 

Hier finden Sie die Routen benötigen Sie erhalten. Ich habe das Gefühl, dass Sie bald einige der anderen brauchen werden, wie zB create und edit.

Edit: das Leben leichter macht, in Ihrem Modell:

def to_param 
    return self.my_string_id 
end 

Wo my_string_id ist die Zeichenfolge, die Sie in der URL als Kennung verwenden. Dadurch wird die URL als ID-Parameter anstelle der numerischen ID verwendet.

See: http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default

Verwandte Themen