在控制器中测试路线

时间:2011-03-16 08:53:42

标签: ruby-on-rails-3 validation routing

我有一个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

2 个答案:

答案 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,则需要稍微更新正则表达式。