ruby-on-rails - 如何拥有可维护的用户名黑名单

标签 ruby-on-rails ruby ruby-on-rails-5

我的应用程序是一个社交平台,我希望支持团队能够维护昵称黑名单。因此,我有一个包含不同名称的模型黑名单。

现在我尝试使用 validates_exclusion_of 将它们映射到 in: 但它引发了以下错误,

wrong number of arguments (given 1, expected 0)

validates_exclusion_of :nickname, in: -> { 
  where(Blacklist.select(:name).map(&:name).uniq.to_s)
}, message: "This nickname is not allowed"

最佳答案

您不需要将要排除的值包装在 lambda 中,如果您只传递 Blacklist AR 查询结果,它将按原样工作。

validates_exclusion_of :nickname,
                       in: Blacklist.select(:name).map(&:name).uniq.to_s,
                       message: 'This nickname is not allowed'

注意,您可以使用 ActiveRecord::Calculations#pluck为了只从黑名单中获取名称,摆脱选择和映射组合,并使用 ActiveRecord::QueryMethod#distinct获取非重复值。

这样你就不需要 uniqto_s 这一步了。最后一个,因为验证正在等待可枚举对象,而您将传递一个字符串。

类似于:

validates_exclusion_of :nickname,
                       in: Blacklist.distinct.pluck(:name),
                       message: 'This nickname is not allowed'

您在验证中使用的 where 将不起作用,因为它应用 WHERE 语句而不传递要检查的列名,因此您将获得一个 ActiveRecord::语句无效

关于ruby-on-rails - 如何拥有可维护的用户名黑名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54391432/

相关文章:

Ruby 量化一个范围

sql - Ruby on Rails find_by 不区分大小写

mysql - 我的 has_and_belongs_to_many 关系有什么问题?

ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题

sql - Rails Activerecord 查询选择性包含

ruby - Docker:Ruby版本从2.2.0升级到2.4.0

ruby-on-rails - “sarlLegalStatuses”不是受支持的 Controller 名称

ruby-on-rails - 运行heroku open时出现Heroku Config Secret Key Base错误

html - 如何将隐藏表格放入表格中?

ruby-on-rails - Rails - 在进程 8773 中通过 Spring 预加载器运行 - 在我的控制台中