2016-01-13 60 views
1

我在我的項目中使用Devise,最初是在2013年使用API​​版本1(api/v1 /)啓動它。我不需要創建一個版本2(api/v2 /),並且我在解決如何爲設計創建新的v2路由時遇到問題。Rails同一設計模型的多個URI模式

/api/v1 /和/ api/v2 /都指向相同的用戶模型,但我讓他們通過不同的控制器。目前下面是我正在嘗試,但我收到消息「無效的路由名稱,已在使用:'new_user_session'」。

The controller setup

作用域路線/ API/V1/

scope '/api' do 
    scope '/v1' do 
     devise_for :users, :controllers => {:registrations => "devise/v1/users_registrations", 
             :sessions => "devise/v1/users_sessions", 
             :passwords => "devise/v1/users_passwords"} 
    end 
end 

作用域路線/ API/V2/

scope '/api' do 
    scope '/v2' do 
     devise_for :users, :controllers => {:registrations => "devise/v2/users_registrations", 
             :sessions => "devise/v2/users_sessions", 
             :passwords => "devise/v2users_passwords"} 
    end 

任何和所有幫助將不勝感激。謝謝

回答

1

您需要使用namespace並排或代替範圍。

現在這些範圍將改變文件本身的位置,但不會更新實際的路徑名稱,因此您會收到重複的錯誤。

I.E.

scope :api do 
    namespace :v1 do 
     devise_for :users, controllers: {registrations: "devise/v1/users_registrations", 
             sessions: "devise/v1/users_sessions", 
             passwords: "devise/v1/users_passwords"} 
    end 
end 



scope :api do 
    namespace :v2 do 
     devise_for :users, controllers: {registrations: "devise/v2/users_registrations", 
             sessions: "devise/v2/users_sessions", 
             passwords: "devise/v2/users_passwords"} 
    end 
end 

然後你的路線將是new_v1_user_sessionnew_v2_user_session,等...

+0

謝謝你,這確實讓我過去無效的路由名稱的問題,但我再碰上另一個問題。在設計helpers.rb devise_parameter_sanitizer時,它似乎期望參數與關鍵'v1_user'一起出現,但關鍵仍然是「用戶」。 Devise :: ParameterSanitizer.new(resource_class,resource_name,params)這裏的resource_name是'v1_user',params包含key'user'所需的所有信息。任何想法發生了什麼?我可能需要爲這個問題開一個新的問題。 – KevinM

+0

對這個打開一個新的問題,我會幫你挖掘它 – blnc

+0

添加評論中的鏈接,我可以找到它。 – blnc