Rails3 + Devise:何时在devise_for和嵌套资源中嵌套资源

  1. 我什么时候应该在devise_for块中嵌套路由? 请举一两个例子来说明用例。 (路线#1)

  2. 如果:foo_object:users so :user has_one :foo_object相关联,我是否需要嵌套:foo_object :users ? (路由#2) :users是设计:users模型。

路线#1:

 devise_for :users resource :foo_object 

路线#2:

 devise_for :users resources :users do resource :foo_object end 

以下示例:

 devise_for :users, :path => 'accounts' resources :users do resources :orders end 

以上意味着身份validation路径为"/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 

希望这可以解决问题。 此外,您可能希望阅读带有Devise - Rails3的嵌套资源