Ruby on rails 当试图覆盖designe';s确认控制员

Ruby on rails 当试图覆盖designe';s确认控制员,ruby-on-rails,login,devise,Ruby On Rails,Login,Devise,我正在尝试实现这里概述的覆盖方法。我的rails版本是4,ruby是2.0。我的实现涉及多个资源,所以我将这个覆盖编码为一个特定的资源,一个附加资源 显示操作正在正确呈现,我可以输入密码。但是当我提交表单时,我会收到以下错误消息 First argument in form cannot contain nil or be empty 我用一个调试器浏览代码,调试器带有@confirmable和self.resource的手表,分别在中使用控制器的\u unconfirmable\u conf

我正在尝试实现这里概述的覆盖方法。我的rails版本是4,ruby是2.0。我的实现涉及多个资源,所以我将这个覆盖编码为一个特定的资源,一个附加资源

显示操作正在正确呈现,我可以输入密码。但是当我提交表单时,我会收到以下错误消息

First argument in form cannot contain nil or be empty
我用一个调试器浏览代码,调试器带有
@confirmable和self.resource
的手表,分别在
中使用控制器的\u unconfirmable\u confirmable和do\u show
方法设置,在do_show方法中呈现show模板时,@confirmable和self.resource似乎都被设置为试图确认的用户。但是,在更新确认时,两者都设置为零

由于代码相当长,我将我的控制器、显示模板和与设计相关的代码放在一个文件夹中

根据评论进行编辑

我将确认令牌作为隐藏字段存储在表单中。它被设置为正确的值(当我使用它查询数据库时,我得到了我期望的用户)

再次使用调试器查看它,我注意到确认令牌的值似乎在更新操作期间被重新生成为不同的toke,但在请求参数中是正确的

{"rider"=>{"confirmation_token"=>"92f786e5270e3562aa48589cc6c36e083cc7a23a41bb55f92c338f381050ec8b"}, "commit"=>"Activate", "controller"=>"riders/confirmations", "action"=>"update"}
因为@confirmable被设置为nil

所以现在我想知道为什么
@确认令牌=designe.token\u generator.digest(用户,:确认令牌,@original\u令牌)在更新时生成一个全新的令牌,此时@original\u令牌的值似乎相同(基于我调试器中的手表)

我通过在一个隐藏字段中使用hidden_field_标记而不是f.input设置确认令牌,为非默认用户实现了这一点。这样做可以防止在更新期间覆盖确认令牌。我已经更新了要点以反映这些变化

当您有一个渲染的show动作时,表单中是否有一个隐藏的
确认\u标记
字段以及一个值?如果在提交表单之前,您通过查找
用户
的令牌(gist中的第45行和第46行)来运行设置
@confirmable
的代码,您是否得到了预期的
用户
?听起来好像在通过令牌查找用户时出了问题。@carols.com查看我的编辑。我还更新了要点,做了一些小改动。