在初始化程序中使用静态变量的路由和活动记录

时间:2015-09-19 06:13:56

标签: ruby-on-rails

我们需要将某些用户名排除在使用之外,但这些用户名可能会随着时间的推移而改变。

有这样的想法,并且几乎发现它不起作用,因为在初始化器中没有活动记录也没有路由

#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

所以我的所有页面都有自己的路线,所以为此我只需要循环路线。

1 个答案:

答案 0 :(得分:1)

您可以将此数组存储在User类中。然后,您可以将检查路由的代码直接放入routes.rb。最后你可以确定他们已经加载;-)你可以从那里将找到的值添加到User::FORBIDDEN_USERNAMES