【发布时间】:2012-02-01 03:24:46
【问题描述】:
我想确保用户不能创建与我现有路由冲突的用户名。我还希望能够拒绝我可能定义的未来路线。我正在考虑这样做:
在模型中:
class User < ActiveRecord::Base
@@invalid_usernames = %w()
cattr_accessor :invalid_usernames
validates :username, :exclusion { :in => @@invalid_usernames }
end
在一些初始化器中:
User.invalid_usernames += Rails.application.routes.routes.map(&:path).join("\n").scan(/\s\/(\w+)/).flatten.compact.uniq
这是“Rails 方式”吗?有没有更好的办法?
【问题讨论】:
-
@iWasRobbed 抱歉,我删除了其他验证。这纯粹是为了避免与 非用户名路由 发生冲突。对于与其他用户名的冲突,我已经有了唯一性验证和数据库级约束。编辑:顺便说一句,如果你确实需要动态地做,你总是可以使用
:in => lambda { ... }(这实际上是我应该在上面使用的,我相信)
标签: ruby-on-rails ruby-on-rails-3 validation activerecord activemodel