Rails验证:用户名,排除

时间:2015-12-29 19:23:40

标签: ruby-on-rails ruby ruby-on-rails-4

  validates :username, exclusion: { in: %w(about account root etc..)

我正在使用上面的内容禁止用户使用保留的用户名,但他们仍然可以在下划线之间使用它们(我允许在用户名中使用下划线)

无论如何我可以让rails验证保留的用户名,即使它是在下划线之前或之后?

谢谢

3 个答案:

答案 0 :(得分:2)

您可以创建一种方法来为您进行验证,并使用普通的旧ruby。正如您所见in the docs here

对你来说这看起来像这样:

$data['metadata'][index]

这样做可以说模型需要使用 validate :my_validation_method def my_validation_method errors.add(:username, :exclusion) if some_condition end 以及所有正常的其他验证进行验证。然后,您手动将错误的字段(在您的情况下:用户名)添加到模型的错误中,因此验证失败。

另请注意my_validation_method而不是validate

您的另一个问题基本上是如何检查输入的值是否包含某些单词。你可以这样做:

validates

这里我添加了一个条件来添加错误,我们循环遍历禁止列表中的每个单词并检查用户名是否包含该单词。请注意,“blablaluke”也会失败!所以它并不完全是你想要的。但是你当然可以自己玩这个。

您执行的规范化程度(例如剥离其他字符)可以为您提供更多控制权,例如阻止def my_validation_method forbid = %w(luke darth artoo fry bender) errors.add(:username, :exclusion) if forbid.find { |w| username.include?(w) } end 等。

更新: 你可以剥掉这样的字符:

ad_min

您可以在username.tr('-_+$^&', '')

中添加您要删除的内容

答案 1 :(得分:0)

根据rails docs这种方式,你只能检查一个值是否在一组给定的值中。

  

这个助手验证了属性'值不包含在给定集合中。

我只想写一个自定义验证method - 你可以在那里做任何你想做的事。

答案 2 :(得分:0)

我可能会使用正则表达式。像这样:

var rename = require("gulp-rename");

gulp.task('styles:cssmin', function(){

    return gulp.src('src/css/*.css')
        .pipe(concat('main.css')) // combine them
        .pipe(cssmin()) // minify them
        .pipe(rename({
            dirname: "assets/css" //manually fixing path for rev-manifest
        }))
        .pipe(rev('path/to/your/rev/rev-manifest.json')) // Specify manifest location
        .pipe(gulp.dest('assets/css'))  // write rev'd assets 
        .pipe(rev.manifest({
            merge: true // Merge because this happens for .js and images too
        }))
        .pipe(gulp.dest('./')); // write manifest
});