Как мне заставить приложение Rails 3.1 принимать маршруты с символом '@' в URL? - PullRequest
0 голосов
/ 13 сентября 2011

Я уже настроил файл маршрута для включения имени пользователя через гем Vanity.

Однако теперь я могу сделать только один конкретный URL - то есть его имя пользователя.

Итакмаршрут, сгенерированный драгоценным камнем, выглядит следующим образом:

  controller :vanities do 
    match ':vname' => :show, :via => :get, :constraints => {:vname => /[A-Za-z0-9\-\+]+/}
  end

Так, скажем, кто-то регистрируется с именем пользователя test, система автоматически создаст свои vname на основе своего имени пользователя.Но что произойдет, если они перейдут на mydomain.com/@test, я хочу, чтобы они оказались на том же маршруте, как если бы они только что пошли на /test.

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Вы можете разрешить дополнительный @ в начале имени вашего тщеславия с помощью:

controller :vanities do 
  match ':vname' => :show, :via => :get, :constraints => {:vname => /@?[A-Za-z0-9\-\+]+/}
end

Затем вам придется удалить @ в вашем действии контроллера, например:

params[:vname].gsub!(/\A@/, '')

Обновление

Если вы хотите, чтобы замена выполнялась во всех ваших контроллерах, вы можете сделать это в before_filter в вашем ApplicationController:

class ApplicationController < ActionController::Base
  before_filter :rename_vanity

  def rename_vanity
    params[:vname].gsub!(/\A@/, '') if params[:vname]
  end
end
0 голосов
/ 13 сентября 2011

Символ @ является зарезервированным символом в URL-адресах и должен быть закодирован в процентах (как %40) при использовании вне определенного контекста, для которого зарезервировано @.URL mydomain/@test просто недействителен.

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