Rails downcase params用于包含验证?

时间:2016-01-19 06:07:52

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

所以我在使用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而没有运气。如何在该字段进入验证之前对其进行缩写?

2 个答案:

答案 0 :(得分:2)

您应该使用before_validation回调:

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

答案 1 :(得分:0)

你怎么能控制控制器上的参数?

或者您可以在validation callback之前使用taglia建议