【问题标题】:Rails downcase params for an inclusion validation?用于包含验证的 Rails 小写参数?
【发布时间】:2016-01-19 06:07:51
【问题描述】:

所以我在带有 Devise 的 Rails 4 应用程序中验证了邀请码。要使用设备创建帐户,用户必须输入验证码。它看起来像这样:

class User < ActiveRecord::Base
  validates :invite_code, inclusion: {
    in: %w(foo347 bar362 foobarr100),
    message: "Rails 4 app is invite only at this time, please sign up for a code."
  }

它很好用,但我想让它不区分大小写,所以 fOo347 或 BaR362 可以工作。我尝试像这样进行 before_save:

  before_save { |user| user.name = user.name.downcase }

按照此处的说明 Simple way to always make a field lowercase in db.

但我认为它不起作用,因为它是一种验证。我还尝试将before_save 换成before_create,但没有成功。如何在字段通过验证之前将其小写?

【问题讨论】:

    标签: ruby-on-rails ruby validation activerecord devise


    【解决方案1】:

    您应该改用before_validation 回调:

    before_validation { self.user.name = self.user.name.downcase }
    

    【讨论】:

    • 小心,''.downcase!返回 nil,这可能是意料之外的!
    • @HieuPham 你是绝对正确的!感谢您指出这一点,我已经编辑了答案。
    【解决方案2】:

    你如何降低控制器的参数?

    或者你可以在validation callback之前使用,就像taglia建议的那样

    【讨论】:

    • 我会在控制器中完成,但由于我使用的是 Devise,控制器中没有创建操作。验证回调有效!
    • 您在设计控制器中没有创建操作是什么?如果你愿意,你可以覆盖Devise controller
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多