Тестирование маршрута в контроллере - PullRequest
2 голосов
/ 16 марта 2011

У меня есть веб-приложение 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

Но я не знаю, как я могу проверить URL, чтобы убедиться, что он не конфликтует с другим маршрутом в моей маршрутизации.

Например, в моем route.rb у меня есть

resources :user

Валидация должна запрещать использование www.my_app.com/user, как я могу это сделать?

Спасибо, Винсент

Ответы [ 2 ]

0 голосов
/ 10 июня 2011

Вы можете попробовать пользовательскую проверку, чтобы отсеять "пользователя"

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, вам необходимо обновитьнемного поэкспериментировать.

0 голосов
/ 10 июня 2011

В ваших маршрутах вы сопоставляете название компании с переменной

match 'some_path/:company_name.format'

, после чего вы можете выполнить поиск, используя company_name, который будет заполнен для вас.

Достаточно проверить уникальность переменной custom_page, чтобы не было совпадений.(обратите внимание, что проверка уникальности не масштабируется - если она будет большой, вам также потребуется ограничение db), если пользователи могут указать только одно поле.

Если вы позволяете пользователям указывать

'some_path/:custom_path_1/:custom_path_2.format' 

тогда вы должны проверить в обоих полях, и теперь это становится грязным.Надеюсь, ты этого не делаешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...