Rails3 + Devise:何时在devise_for和嵌套资源中嵌套资源
-
我什么时候应该在
devise_for
块中嵌套路由? 请举一两个例子来说明用例。 (路线#1) -
如果
: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的嵌套资源