我们需要将某些用户名排除在使用之外,但这些用户名可能会随着时间的推移而改变。
有这样的想法,并且几乎发现它不起作用,因为在初始化器中没有活动记录也没有路由
#initializer/usernames.rb
FORBIDDEN_USERNAMES = %W( admin superadmin owner ceo mail sex ..... )
Page.select(:url).map{|x| FORBIDDEN_USERNAMES << x.url}
Rails.application.routes.routes.select{|route|
route = route.path.spec.to_s
next if route == "/" || route.starts_with?("/:slug")
FORBIDDEN_USERNAMES << route.split("/")[1].gsub("(.:format)", "") rescue next
}
FORBIDDEN_USERNAMES.uniq!
在after_initializer
内甚至路由仍然不存在。
我们可以把这些东西放在哪里,还是应该把它直接放到user.rb
?所以我们需要将逻辑放入该方法中吗?
class User
validates :username_is_allowed
def username_is_allowed
errors.add :username, "is not allowed" if FORBIDDEN_USERNAMES.include? username
end
end
将此剪辑添加到routes.rb
Page.select(:url).each do |page|
get page.url => "application#pages", url: page.url, format: false, as: page.url
end
所以我的所有页面都有自己的路线,所以为此我只需要循环路线。
答案 0 :(得分:1)
您可以将此数组存储在User
类中。然后,您可以将检查路由的代码直接放入routes.rb
。最后你可以确定他们已经加载;-)你可以从那里将找到的值添加到User::FORBIDDEN_USERNAMES
。