0

バックグラウンド

Devise::RegistrationsControllerという名前のクラスを使用して、ユーザー登録を自分で処理するためにサブクラス化しましDeviseUsersControllerた。

アクションをオーバーライドする必要があります。create以前に使用superして、実行する必要のある追加のことを実行しましたが、これでは要件が満たされなくなりました。

そこで、github でデバイス コードをチェックアウトし、いくつかの調整を加えて再作成しようとしました。しかし、最初の行から問題が発生しました...

コード

class DeviseUsersController < Devise::RegistrationsController
  ...

  def build_resource
    super
  end

  def sign_up_params
    super
  end

  def create
    build_resource(sign_up_params)
    ...
  end

end

エラー

super: no superclass method `sign_up_params' for #<DeviseUsersController:0x007f8f2d09a538>

質問

なぜこのエラーが発生するのですか? Devise::RegistrationsController コードに基づいて、プライベートではないメソッドが存在することは明らかです。

バージョン:

  • レール 3.2.13
  • ルビー1.9.3
  • 考案 2.2.3

編集 コードを次のように変更します。

class DeviseUsersController < Devise::RegistrationsController
  ...

  def create
    build_resource(sign_up_params)
    ...
  end

  protected

  def build_resource
    super
  end

  def sign_up_params
    super
  end

end

まだ動作しません。

4

2 に答える 2

0

Devise::RegistrationsController コードに基づいて、メソッドがGem v3.0.0に存在することは事実ですが、たまたま Gem v2.2.3 がインストールされています。

gem unpack deviseインストールしたバージョンのソース コードを確認するために使用することにしました。コントローラーの実装は v3.0.0 とは異なり、このバージョンにはメソッドがありませんsign_up_params

于 2013-07-18T21:08:43.900 に答える