2013-11-26 111 views
0

我有一個簡單的問題,其中路由/ url名稱由用戶角色確定。目前顯示的路線是/new_admin/dispensaries。如果用戶具有管理者或執行者的角色,那麼命名路線應該是'/ dashboards/dispensaries'。Rails中的動態命名路由

這是一種簡單,但難的是,在我的routes.rb:

命名空間:new_admin做 資源:vendor_templates 資源:markdown_docs 資源:email_lists

namespace :moderation do 
    resources :reported_reviews 
end 

resources :users do 
    member do 
    get :user_bans 
    post :ban_unban, to: 'user_bans#create' 
    delete :ban_unban, to: 'user_bans#destroy' 
    end 
end 

# TODO - this should be written generically to support dispensary/doctors/whatever 
get '/dispensaries/reviews', :to => "reviews#all", :as => :all_reviews 
get '/dispensaries/pictures', :to => "pictures#all", :as => :all_pictures 
get '/dispensaries/videos', :to => "videos#all", :as => :all_videos 
get "/dispensaries/autocomplete", to: "dispensaries#autocomplete" 

resources :vendors do 
    resources :ownership_transfers, only: [:new, :create] 
end 
... 

我因爲如果我更改new_admin路由,所以很多其他路由會受到影響。任何想法的傢伙?

+0

我不太明白。爲什麼不爲儀表板創建新的命名空間,並將任何經理或主管人員重定向到新路徑? –

+0

因爲我還是個新手,這就是爲什麼。讓我嘗試一下。 – Finks

+0

對不起,如果聽起來居高臨下。解決方案對我來說有點顯而易見:) –

回答

0

我們已經做了這樣的事情。這不是很漂亮,但這個解決方案爲我們:


蛞蝓

你基本上影射到一個名爲Slugs型的路線。這是您使用名稱而不是ID的位置,允許您製作用戶友好的路線(例如/delivery/today)。問題是,爲了創建這些路由,您必須在個別航線它們定義文件

有兩種寶石,你可以用它來處理你的重擊路線 - FriendlyID & Slugalicious。這兩個允許您創建重擊路線,但基本上FriendlyID只是改變了ID,而Slugalicious是一個完全獨立的系統

我們使用Slugalicious下面的代碼,但是,你可能會想FriendlyID(有一個RailsCast for it here) :

enter image description here


路由

你的問題是路由是否outsi德REST風格的控制器接口的範圍,這意味着你必須調用所有獨家在routes.rb中文件的resources引用的航線

如果使用Slugalicious,它有自己的Slugs數據庫,這意味着我們可以用它來動態創建的路線,像這樣:

#Slugs 
    begin 
      Slug.all.each do |s| 
       begin 
        get "#{s.slug}" => "#{s.sluggable_type.downcase.pluralize}#show", :id => s.slug 
       rescue 
       end 
      end 
    rescue 
    end 

這是活的代碼,並輸出路由所有的蛞蝓動態文件。我們設法讓這種以編程方式更新的方法是使用一個observer類是這樣的:

class SlugObserver < ActiveRecord::Observer 
    def after_save(slug) 
    Rails.application.reload_routes! 
    end 

    def after_destroy(slug) 
    Rails.application.reload_routes! 
    end 
end 

我很欣賞你可以有你的答案了,但因爲你是一個初學者,我覺得我可以幫忙爲你解釋slu stuff東西