3

私はこれがここで何度も尋ねられたことを理解しています(私はウィキも読んでいます)。しかし、ルート名を適切に同じに保つ方法については、まだ混乱しています。

現在、私のデバイスルートは、カスタムURLを使用して以下のとおりです(たとえば/user/signup)。

私のモデルはUser

ルート:

  devise_for :users, :controllers => { :registrations => "registrations" }, :path_names => {
    :sign_up => 'signup'
  }

  devise_for :users, :path => "user", :except => "create", :path_names => { 
    :sign_in  => 'login', 
    :sign_out => 'logout', 
    :password => 'forgot-password', 
    :confirmation => 'verification', 
    :unlock   => 'unblock', 
    :sign_up  => 'signup' 
  } 

私がやろうとしているのは、作成アクションにフックすることだけです。これにより、作成したハニーポットフィールドが入力されているかどうかを確認できます(スパムを防ぐため)。本当にやりたいことはそれだけです。

URLを同じに保ちたいのですが/user/signup。私がしなければならない追加のステップはありますか?

これは私がこれまでに持っているものです...

/app/controllers/registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController

  def new
    super
  end

  def create
    super
  end

end   

私は得ていますuninitialized constant Users

4

4 に答える 4

10

非常に簡単に言えば、コントローラーを「users」フォルダーに配置する必要があり、それですべてが修正されました。(また、ルートコントローラーは:registrations => "users/registrations"

于 2012-12-02T18:13:21.867 に答える
3

同じエラーが発生しました。私の場合はroutes.rb

だった:devise_for :users,controllers: {sessions: "users/sessions"}

結果:uninitialized constant Users

私の場合、 「s」がない{sessions: "users/sessions"} はずになるまで、何が起こっているのかわかりませんでしたuser/sessions

于 2015-01-30T10:36:27.887 に答える
2

コントローラに名前を付ける必要はありません。からの継承を維持しながらUsers::RegistrationsController名前を付けるだけです。RegistrationsControllerDevise::RegistrationsController

最初の目的はわかりませんが、2番目devise_forにコピー/移動する必要があります。:controllers => { :registrations => "registrations" }devise_for

于 2012-12-02T08:23:37.487 に答える
1

オンdevise (4.7.3)rails (6.0.3.3)、正しいコントローラーはではありSessionませんSessions

これをに追加する必要がありますconfig/route.rb

devise_for :users, controllers: { session: 'users/sessions' }
于 2020-09-23T10:19:48.317 に答える