Как избежать значения link_to: id в Rails 2.3.5 - PullRequest
0 голосов
/ 18 июня 2011

на рельсах 2.3.5

У меня есть мнение, что публичная информация о пользователе, который живет по URL-адресу, выглядит следующим образом:

http://www.mysite.com/users/johndoe

Мой маршрут:

map.connect 'members/:id', :controller => "users", :action => "showmember"

Я никогда не хочу предоставлять идентификаторы int для пользователей, поэтому я использую имя пользователя в качестве идентификатора для этого представления.

Когда я ссылаюсь на него:

<%=link_to user.username, :controller => 'users', :action => 'showmember', :id => user.username %>

Все хорошо, за исключением случаев, когда имя пользователя содержит символы, которые необходимо экранировать. Какой лучший способ избежать идентификатора в link_to?

Ответы [ 2 ]

1 голос
/ 18 июня 2011
CGI::escape(user.username)

этот метод будет URI-кодировать значение, поэтому он безопасен в URL.Разве Rails не делает это автоматически?Вы пытались не убегать и не помещать в него сумасшедших персонажей?

Правка и противоположную версию:

CGI::unescape(params[:id])

Хотя я все еще чувствую, что рельсы могут справиться с этим автоматически для вас.Возможно, вам захочется протестировать.

Снова отредактируйте:

В Rails есть метод .parameterize, поэтому: user.username.parameterize сделает строку пригодной для URL, это задокументировано здесь: http://apidock.com/rails/v3.0.7/String/parameterize

Основная проблема в том, что если у вас есть 2 имени пользователя: my.user и myuser, они оба будут параметризоваться в одну строку myuser

Я думаю, что принятый способ сделать это(как показывает пример документа) следующим образом:

"#{user.id}-#{user.username.parameterize}"

таким образом, если вы сделаете User.find(params[:id]), он удаляет все после первого числа и просто использует его в качестве идентификатора.Существуют гемы, которые сделают уникальную строку, дружественную к параметрам, которую вы можете использовать, если вы действительно против использования идентификатора пользователя в параметрах (есть ли причина для такой проблемы?).Один из таких камней - friendly_id: https://github.com/norman/friendly_id/, хотя есть и другие.Идея состоит в том, что в вашей модели есть еще одно поле, специально предназначенное для URL, и оно автоматически генерируется в before_create на основе вашего поля имени пользователя.Он должен быть уникальным и дружественным к параметрам, о котором заботится самоцвет.

Надеюсь, этот ответ поможет вам больше: p

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

Проблема была не в том, что мне удалось сбежать. Я закончил настройку маршрута на основе этого вопроса:

Строка запроса Rails с точкой (или полной остановкой).

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