下面的例子:上述
devise_for :users, :path => 'accounts'
resources :users do
resources :orders
end
意味着認證路徑將是"/accounts/sign_in"
,"/accounts_sign_up"
等。有些可能不知道,重要的是承認devise_for :users
不是實際上映射到UsersController
和模型。它甚至不是一條資源路線,儘管它看起來很像它。這就是爲什麼我們不能把它像下面這樣:
devise_for :users do
resources: somereosouce
end
所有devise_for
所做的是以下路線圖:
# Session routes for Authenticatable (default)
new_user_session GET /users/sign_in {:controller=>"devise/sessions", :action=>"new"}
user_session POST /users/sign_in {:controller=>"devise/sessions", :action=>"create"}
destroy_user_session GET /users/sign_out {:controller=>"devise/sessions", :action=>"destroy"}
# Password routes for Recoverable, if User model has :recoverable configured
new_user_password GET /users/password/new(.:format) {:controller=>"devise/passwords", :action=>"new"}
edit_user_password GET /users/password/edit(.:format) {:controller=>"devise/passwords", :action=>"edit"}
user_password PUT /users/password(.:format) {:controller=>"devise/passwords", :action=>"update"}
POST /users/password(.:format) {:controller=>"devise/passwords", :action=>"create"}
# Confirmation routes for Confirmable, if User model has :confirmable configured
new_user_confirmation GET /users/confirmation/new(.:format) {:controller=>"devise/confirmations", :action=>"new"}
user_confirmation GET /users/confirmation(.:format) {:controller=>"devise/confirmations", :action=>"show"}
POST /users/confirmation(.:format) {:controller=>"devise/confirmations", :action=>"create"}
所以說,你可以做到以下幾點,但會有些衝突:
devise_for :users
resource :users do
resource :foo_object
end
嵌套資源一點點,如果你有類似以下內容:
class Users < ActiveRecord::Base
has_many :foo_object
end
class FooObject < ActiveRecord::Base
belongs_to :users
end
那麼你的嵌套的資源將
resource :users do
resource :foo_object
end
希望這將清除的東西了。你可能還需要有Nested Resource with Devise - Rails3
感謝澄清'devise_for'問題一讀。我讀過的最好的解釋! – HM1
對於化合物Q#2,我知道這就是我會做窩的資源......我想問題更是必要,或者我必須巢關聯模型這種情況下的資源?因爲在這種情況下,我可以在控制器中使用'current_user'並構建/更新':foo_object'模型。我想知道是否有這樣做的後果。 – HM1
@ HM1它不是完全必要的,但如果你想定義一些邏輯你的應用程序,那麼是的。它是分組資源的一種更簡潔的方式。然而,在你的情況下,你知道'user'與'foo_object'關聯。所以,當你執行一個'user'你會執行動作'foo_object'也是一種行動。所以,你的網址可能會看起來像這樣的事'/用戶/ 3/foo_object/4'另一個原因,就必須有嵌套的路線是因爲它的Rails中的重要原則REST風格之一。 – David