我有一个Rails 3.0 Web应用程序,允许用户创建自己的应用程序路径。
example : www.my_app.com/user_company_name
所以我在用户数据库字段中存储自定义路径。用户可以通过输入改变路径。
我在模型
中添加了此验证validates_presence_of :custom_page
validates_format_of :custom_page, :with => /^([a-z]|[0-9]|\-|_)+$/, :message => "Only letter (small caps), number, underscore and - are authorized"
validates_length_of :custom_page, :minimum => 3
validates_uniqueness_of :custom_page, :case_sensitive => false
但我不知道如何验证url以检查它是否与我的路由中的其他路由冲突。
例如在我的route.rb中我有
resources :user
验证需要不允许使用www.my_app.com/user,我该怎么做?
谢谢,vincent
答案 0 :(得分:0)
在您的路线中,您将公司名称与变量
匹配match 'some_path/:company_name.format'
然后,您可以使用company_name进行查找,其中将为您填充rails。
验证custom_page变量的唯一性应该足以确保没有重叠。 (请注意,验证唯一性不会扩展 - 如果这将很大,您也需要数据库约束),只要用户只能指定一个字段。
如果您要让用户指定
'some_path/:custom_path_1/:custom_path_2.format'
然后你必须在两个领域进行验证,现在它变得混乱了。希望你不是那样做的。
答案 1 :(得分:0)
您可以尝试自定义验证以清除“用户”
validate :custom_page_cant_be_user
def custom_page_cant_be_user
errors.add(:custom_page, "can't be `user`") if self.custom_page =~ /^user$/i
end
假设:custom_page
作为基本[a-z]
进入,如果:custom_page
有/user
,则需要稍微更新正则表达式。