2015-07-31 6 views
5

Kürzlich habe ich über Schienen Bedenken in Routen von dieser Diskussion How to have one resource in routes for namespace and root path altogether - Rails 4 kennen gelernt. Jetzt in meiner Anwendung habe ich Routen wie folgt:Routing-Probleme definieren unterschiedliche Parameter für Ressourcen

namespace :admin do 
    resources :photos 
    resources :businesses 
    resources :projects 
    resources :quotes 
end 
resources :photos, param: 'slug' 
resources :businesses, param: 'slug' do 
    resources :projects, param: 'slug' #As I need both the url one inside business and one outside 
end 
resources :projects, param: 'slug' 
resources :quotes, param: 'slug' 

Und es gibt viele weitere Ressourcen, die wiederholen, wie ich sie brauchte. Ich weiß über Bedenken, wie sie umgesetzt werden können. Mit den Bedenken kann ich es wie folgt tun:

concern :shared_resources do 
    resources :photos 
    resources :businesses 
    resources :projects 
    resources :quotes 
end 
namespace :admin do 
    concerns :shared_resources 
end 
concerns :shared_resources 

aber wie kann ich geben verschiedene param jedes Mal in den Anliegen? Ich habe es so gemacht:

concerns :shared_resources, param: 'slug' 

Aber das bringt keine Änderung in den Routen. Und wenn ich hinzufügen:

resources :photos, param: 'slug' 

Dann wird es zu beiden Routen Slug statt ID hinzufügen. Aber in Admin-Seite brauche ich ID und im Front-End brauche ich Slug. Gibt es also Möglichkeiten, dies in den Belangen so zu übergeben, um den Code zu DRY zu machen.

Antwort

5

Ja, ich erinnerte mich daran, etwas gesehen zu haben. Es war nicht im Rails Guide, aber an answer to a SO question das überraschte mich irgendwie. Sie können einen Block verwenden: (zitiert aus der oben genannten Antwort)

In Rails 4 können Sie Optionen zu Bedenken übergeben. Also, wenn Sie dies tun:

# routes.rb 
concern :commentable do |options| 
    resources :comments, options 
end 

resources :articles do 
    concerns :commentable, commentable_param: 'slug' 
end 

Dann, wenn Sie Routen rechen, werden Sie Sie eine Route wie

POST /articles/:id/comments, {commentable_param: 'slug'} 
+0

Danke für die Antwort erhalten sehen, aber leider hat das nicht funktioniert Ich habe keine Änderungen gefunden. Hast du das jemals versucht? Bedeutet, wenn das für dich funktioniert hat. – Deep

+0

Hmm, ich war mir nicht sicher, aber in der Frage, die ich verlinkt habe, haben sie Parameter verwendet, die wie '$ {concern_name} _etwas 'aussahen. Können Sie mit dieser Syntax versuchen, wenn es funktioniert? Um ehrlich zu sein habe ich es nicht selbst versucht, aber angesichts der Upvotes der Antwort dachte ich, es würde funktionieren ... –

+0

Es hat hier funktioniert! Danke: D –

Verwandte Themen