Rails中有没有办法说“运行除EXCEPT:password之外的所有验证”?

问题描述

| 我正在使用Devise进行身份验证。如果未设置“ 0”,Rails / Devise \的验证将要求设置密码以及“ 1”。 当我邀请新用户时,我显然不想设置他们的密码,因此当我在系统中创建邀请时,由于
user.password
为空,所以邀请失败。 我可以为用户设置一个临时的“ 0”,但是当他们输入自己的密码时,由于设置了“ 0”,因此不会进行对“ 4”和“ 5”的验证检查。 有什么办法告诉Rails我想运行除与
:password
相关的验证之外的所有验证? 我知道Rails具有
:if
条件,这可能会解决我的问题,但是Devise代表我声明了
:password
验证,因此基本上是隐藏的。 我如何在这里获得理想的结果?希望这不是黑客。 我当前的假设解决方案有些混乱:我唯一能想到的就是创建一个不是User模型的新的邀请模型,并对表单使用邀请模型。提交邀请后,我可以验证邀请并将所有值复制到新的用户模型。我可以保存该用户而无需任何验证。 那是我梦up以求的最佳解决方案。 看来我的解决方案要比说简单的事情多得多的工作:
user.save(validations => {:except => :password})
编辑:我已经找到解决方案的一部分,但是我仍然有问题。在我们的用户模型中,我们可以重写Devise方法,以防止通过以下代码验证邀请密码:
#protected
def password_required?
  !is_invited && super
end
is_invited
属性只是我添加
users
表/模型中的一列。 但是,这里有一个陷阱。当用户接受邀请并到达需要设置密码/密码确认的表格时,“ 14”将始终返回“ 15”。 这使我深感困惑。我看不到
requires_password?
valid?
如何同时成立。如果需要密码,则应进行验证检查并导致验证失败。 我开始讨厌Devise-或只是讨厌使用gems在黑盒中构建应用程序的某些部分。我认为真正的解决方案可能是淘汰Devise,然后从头开始。这样,您的应用程序就可以完全控制所有这些工作方式:(     

解决方法

我最近开始使用这个很棒的devise插件:devise_invitable 它是常用的,因此用户(或任何模型)可以邀请其他用户加入。 但我将其调整为手动(通过管理面板)邀请新的潜在用户加入我的应用。 希望这可以帮助!