1

私はかなり単純なアプリに取り組んでいます。その基本は、部門用 (下の department.rb) とユーザー用 (下の user.rb) の 2 つのモデルがあることです。部門には多くのユーザーがいて、ユーザーは部門に属しています。

ユーザー認証に 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

これにより多くのルーティング エラーが発生するため、間違ったパスに向かっているに違いなく、おそらくもっと簡単な方法があると思います。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 に答える