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
,但我不确定其中的代码是否有效。