Rails3 + Devise: когда нужно вложить ресурс в devise_for и вложенные ресурсы

  • Когда я должен устанавливать маршруты в блоке devise_for? Пожалуйста, дайте один или два примера, чтобы показать пример использования. (Маршруты №1)

  • Если :foo_object связано с :users, поэтому :user has_one :foo_object, мне нужно вложить :foo_object в <<22 > ? (Маршруты №2) :users - это модель разработки :users.

Маршруты №1:

devise_for :users  
resource :foo_object

Маршруты № 2:

devise_for :users
resources :users do      
  resource :foo_object
end

Ответ 1

Следующий пример:

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

Надеюсь, это прояснит ситуацию. Также вы можете захотеть прочитать Вложенный ресурс с помощью Devise - Rails3