:user 如果用户-6ren">
gpt4 book ai didi

ruby-on-rails - 模型验证以拒绝来自用户名的定义路由

转载 作者:行者123 更新时间:2023-12-04 07:31:56 26 4
gpt4 key购买 nike

有什么方法可以向用户模型添加验证,以便拒绝与已定义路由相同的用户名?

例如:

get 'search'
get :username => "users#show", :as => :user

如果用户输入“search”作为用户名,它会拒绝它,因为它已经作为 rails 路由存在。

另一种可能的方法是创建一个明确的黑名单,但显然随着新路由的添加,这需要更多的维护。

编辑

将答案改编成工作解决方案:

validate :username_blacklist

private
@@username_blacklist = nil

# checks if the username is on a blacklist
def username_blacklist
unless @@username_blacklist
@@username_blacklist = Set.new [ "badword", "naughtybadfun"]
Rails.application.routes.routes.each do |r|
reserved_word = File.dirname(r.path).split('/')[1]
@@username_blacklist << reserved_word if reserved_word
end
end

errors.add(:username, "is restricted") if @@username_blacklist.include?(username)
end

最佳答案

在您的验证中,您可以遍历所有定义的路由并根据所需的用户名检查它们。

这可以帮助您获取定义的路径:

Rails.application.routes.routes.each {|r| p r.path.to_s}

关于ruby-on-rails - 模型验证以拒绝来自用户名的定义路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5985185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com