设计为嵌套资源 - 路由

时间:2013-06-06 13:22:29

标签: ruby-on-rails devise ruby-on-rails-4

我正在开发一个相当简单的应用程序。其基础是我有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参与,我想我可以在routes.rb中使用一个简单的嵌套资源来实现这一点。类似的东西:

resources :departments do
  resources :users
end

使用Devise我尝试过:

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

1 个答案:

答案 0 :(得分: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

希望这有帮助,如果有任何问题,请告诉我。