2011-03-16 79 views
2

我有一个Rails 3.0网络应用程序,允许用户创建自己的路径到应用程序。控制器中的测试路由

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 

加入这个验证,但我不知道我怎么能确认网址是否是不冲突的,在我的路由另一条路线。

举例来说,在我的route.rb我有

resources :user 

验证需要使用www.my_app.com/user到不允许,我可怎么办呢?

感谢,文森特

回答

0

在你的路线,你的公司名称相匹配的变量

match 'some_path/:company_name.format' 

那么你可以做使用COMPANY_NAME这Rails会为你查找。

验证custom_page变量的唯一性应该足以确保没有重叠。 (请注意,验证唯一性并不会扩展 - 如果这样做会很大,您还需要db约束),只要用户只能指定一个字段即可。

如果你让用户指定

'some_path/:custom_path_1/:custom_path_2.format' 

,那么你必须在这两个领域来验证,而现在它变得凌乱。希望你没有那样做。

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你需要更新正则表达式一点。