面试题答案
一键面试1. 编写路由约束类
在Rails应用的lib
目录下创建一个文件,例如ip_range_constraint.rb
(记得在config/application.rb
中确保config.autoload_paths += %W(#{config.root}/lib)
,以便自动加载这个文件)。
class IpRangeConstraint
def initialize(start_ip, end_ip)
@start_ip = IPAddr.new(start_ip)
@end_ip = IPAddr.new(end_ip)
end
def matches?(request)
client_ip = IPAddr.new(request.remote_ip)
@start_ip <= client_ip && client_ip <= @end_ip
end
end
2. 在路由定义中使用
在config/routes.rb
文件中使用刚刚定义的路由约束。
Rails.application.routes.draw do
constraints(IpRangeConstraint.new('192.168.1.0', '192.168.1.255')) do
get '/specific_path', to: 'your_controller#specific_action'
end
# 其他常规路由定义
get '/other_path', to: 'other_controller#other_action'
end
上述代码中,IpRangeConstraint
类用于判断请求的IP地址是否在指定的范围内。在routes.rb
中,通过constraints
方法应用这个约束,只有当请求的IP地址在192.168.1.0
到192.168.1.255
之间时,/specific_path
的路由规则才会生效。