2013-06-06 4 views
1

Я работаю над довольно простым приложением. Основой является то, что у меня есть 2 модели, одна для отделов (department.rb ниже) и одна для пользователей (user.rb ниже). Департаменты имеют много пользователей и пользователей, входящих в отделы.Разработать как вложенный ресурс - Маршруты

Я использую Devise (3.0.0.rc & Rails 4.0.0.rc1) для аутентификации пользователя и выполнил переход, чтобы добавить department_id в модель пользователя в качестве внешнего ключа.

У меня возникла проблема с получением маршрутов, которые кажутся логичными для пользователей, которые отправятся на главную страницу своих департаментов и смогут зарегистрироваться или войти с этой страницы. Что-то вроде www.example.com/departments/department:id/sign_in

Без участия Devise Я думаю, что смог бы достичь этого с помощью простого вложенного ресурса на моих маршрутах. Rb. Что-то вроде:

resources :departments do 
    resources :users 
end 

Использование Завещание Я попытался:

resources :departments do 
    devise_for :users, :path => '' 
end 

Это создает много ошибок маршрутизации, так что я думаю, что я должен быть заголовок вниз неверный путь, и что, вероятно, является более простой способ. Будучи довольно новым для рельсов, я надеялся, что кто-то может указать мне в правильном направлении на лучшее решение.

Моя user.rb модель:

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    belongs_to :department 

    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    validates :department_id, presence: true 
end 

Моя модель department.rb является:

class Department < ActiveRecord::Base 
    has_many :users 

.... All my validation rules 
end 

ответ

0

Я попытался повторить ваше приложение, и для меня это работало. Попробуйте сыграть с devise_scope ...

#routes.rb  

resources :departments 

devise_for :users 

devise_scope :user do 
    get 'departments/:department_id/sign_in' => 'devise/sessions#new', :as => :department_user_sign_in 
end 

Надеется, что это помогает, и дайте мне знать, если есть какие-либо проблемы.

Смежные вопросы