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 的参与,我想我可以在我的 routes.rb 中使用一个简单的嵌套资源来实现这一点。就像是:

resources :departments do
  resources :users
end

使用我尝试过的设计:

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

这会产生很多路由错误,所以我认为我一定走错了路,而且可能有更简单的方法。对 Rails 相当陌生,我希望有人能指出我正确的方向,找到更好的解决方案。

我的 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
4

1 回答 1

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
于 2013-06-09T02:31:53.547 回答