我只是跟随这篇文章在rails 4应用程序中实现无所不在的功能。
在我的用户模型中,我有两种类型的用户,即管理(由表单创建)和成员(由全方位创建)。我需要绕过所有的验证成员用户谁将创建无所不在。
我知道,可以通过以下选择来做到这一点:
save(validate: false)然而,采用了first_or_create方法:
def self.from_omniauth(auth)
# where(auth.slice(:provider, :uid)).first_or_create do |user|
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.email = auth.info.email
user.password = Devise.friendly_token[0,20]
user.name = auth.info.name # assuming the user model has a name
user.image = auth.info.image # assuming the user model has an image
end
end,所以,我的问题是:在这个无所不在的情况下,我如何绕过所有的验证?
请给我建议。
发布于 2015-01-04 17:13:25
first_or_create似乎没有任何选择,但您仍然有几个选项。
您可以不使用first_or_create,而可以执行first_or_initialize,它与first_or_create一样工作,但不保存。然后,您将有一个可以调用save(validate: false)的新记录。
但是,如果系统中的记录是无效的,那么如果你去更新这些记录中的一封电子邮件,你将不得不再次绕过验证程序。
我的建议是将这一逻辑转移到验证本身:
validate_presence_of :name, unless: -> { from_omniauth? }
private
def from_omniauth?
provider && uid
endhttps://stackoverflow.com/questions/27765953
复制相似问题