Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从子类调用方法会导致;没有超类方法`注册参数';为……而设;。为什么?_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails 从子类调用方法会导致;没有超类方法`注册参数';为……而设;。为什么?

Ruby on rails 从子类调用方法会导致;没有超类方法`注册参数';为……而设;。为什么?,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,背景 我已将develope::RegistrationsController子类化,以使用名为developeUsersController的类自己处理用户注册 我需要重写create操作-我以前使用过super,然后执行了需要执行的其他操作,但是,这将不再满足我的要求 所以我检查了一下,并尝试通过一些调整来重新创建它。然而,我从第一行开始就有问题 代码 class DeviseUsersController < Devise::RegistrationsController ...

背景

我已将
develope::RegistrationsController
子类化,以使用名为
developeUsersController
的类自己处理用户注册

我需要重写
create
操作-我以前使用过
super
,然后执行了需要执行的其他操作,但是,这将不再满足我的要求

所以我检查了一下,并尝试通过一些调整来重新创建它。然而,我从第一行开始就有问题

代码

class DeviseUsersController < Devise::RegistrationsController
  ...

  def build_resource
    super
  end

  def sign_up_params
    super
  end

  def create
    build_resource(sign_up_params)
    ...
  end

end
class DevisionUsersController
错误

super: no superclass method `sign_up_params' for #<DeviseUsersController:0x007f8f2d09a538>
super:没有超类方法“注册参数”#
问题

为什么会发生这种错误?根据数据,显然存在非私有的方法

版本:

  • 轨道3.2.13
  • Ruby 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
class DevisionUsersController

仍然不起作用。

如果你仔细观察,你会看到
受保护
在一系列方法之前,包括
注册参数

嗯,我得说这真的不重要,我使用我的本地回购协议,这样我就能找到它:)

在您的子类中,您的方法
注册参数
是一个公共方法。事实上,在父类中确实没有这样的公共方法。错误是正确的


为了解决这个问题,我认为您可以将子类中的方法
sign_in_params
设置为protected,尽管我还没有验证过这一点。

尽管基于designe::RegistrationController代码,该方法确实存在于Gem v3.0.0中,但我碰巧安装了Gem v2.2.3


我决定使用
gem unpack designe
查看我安装的版本的源代码。控制器的实现与v3.0.0不同,并且此版本没有
注册参数
方法。

不幸的是,这并没有解决问题。请参阅编辑的帖子。@user2460234,当你说“没有解决问题”时,你会给出具体的错误吗?我无法通过一般的方式知道“没有工作”。我很抱歉,因为我只编辑了问题的代码部分,我想很明显错误是完全相同的。@user2460234,没问题。我以前也遇到过同样的问题,最后我使用了Rails传统的param方法,比如
resource=params[:user]
,因为我没有时间,它可以工作。我没有看到任何问题。这是一个解决方案。另一种方法是将
sign\u-up_-param
方法复制到控制器中,使用相同的代码(仅一行),而不是调用
super
,但我不确定其中的代码是否有效。