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
Antwort
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
Vielen Dank! Ich schätze es sehr, dass Sie Beispielcode gegeben haben. –
Versuchen exclusion
Validierung im Modell zu verwenden, http://guides.rubyonrails.org/active_record_validations.html#exclusion
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
- 1. Datensatzvervielfältigung in Rails verhindern
- 2. Rails - Testen einer Methode, die DateTime.now verwendet
- 3. MySQL2 verhindern von Rails Migration
- 4. Validieren Sie ein Rails-ActiveRecord-Feld mit einer Callback-Methode?
- 5. Relate Rails Funktion/Methode zu html.erb
- 6. So verhindern Sie Tensorflow unpack() - Methode Casting zu float64
- 7. Verhindern, dass eine Methode vor einer anderen aufgerufen wird
- 8. Rails Create Methode Validation Fehler mit eins zu eins Assoziation
- 9. richtige Art zu verhindern, dass doppelte Datensätze in Rails
- 10. Rails redirect_to post-Methode?
- 11. has_many Build-Methode, Rails
- 12. Broadcast in ConvertAndSendToUser-Methode in SimpMessagingTemplate zu verhindern
- 13. Rails `link_to` Methode mehrfach
- 14. rails - undefined Methode `model_name '
- 15. Rails - Methode setzte Eingabe nicht mit params
- 16. Wie kann ich verhindern, dass eine Methode ihre Argumente mutiert?
- 17. Rails Test Controller private Methode mit params
- 18. Wie beschließt Rails, ein Formular mit einer Methode von PUT oder POST zu rendern?
- 19. Rails: Auftrag mit einer Beziehung has_many/gehört zu
- 20. Ordnungsgemäße Methode, um zu verhindern, dass Doctrine-Datensatz gelöscht wird
- 21. Rails UJS: das Ereignis Verhindern Ausbreitung mit " 'Ajax: before'"
- 22. Umleiten von einer Controller-Methode zu einer anderen Controller-Methode
- 23. Rails 3.2.11 Asset Pipeline vom Caching verhindern?
- 24. Rails undefined Methode ReactJS
- 25. Hinzufügen einer Methode zu einer untergeordneten Klasse mit dem Namen einer geerbten Methode
- 26. Hinzufügen einer Methode zu einer Domänenklasse
- 27. Rails undefinierte Methode, aber Methode existiert
- 28. Rails: Override ActiveRecord association-Methode
- 29. Rails generic nicht Controller-Methode
- 30. Wie die Rückgabetyp einer generischen Methode überprüfen NPE zu verhindern, wenn
fügen Sie ein ': before_filter: check_new,: nur => [ : new] '& verhindere die Weiterleitung an neue Aktion. –