не может изменить замороженную строку - PullRequest
2 голосов
/ 23 апреля 2009

Я использую следующий код в представлении, полученном с

http://www.igvita.com/2006/10/20/adding-social-bookmarks-in-rails/

Это код pastie

Но я получаю следующую ошибку:

TypeError in Pages#show
Showing app/views/pages/show.html.erb where line #26 raised:
can’t modify frozen string
Extracted source (around line #26):
23: Twitter
24: Facebook
25:
26: <% current_uri = u(request.protocol << request.host_with_port << request.request_uri)
27: title = u(@title)
28:
29: bookmarklets = {
============

Когда я заменяю на это

current_uri = u(request.protocol << request.host_with_port << request.request_uri)

Ошибка замороженной строки исчезла, но ссылка не проанализирована. то есть ссылка отображается следующим образом:

http://digg.com/submit?phase=2&url={{url}}&title={{url_encoded_title}}

Ну, я спросил в комментарии к статье, но не смог получить никакого ответа. Итак, я спрашиваю это здесь.

Спасибо

Ответы [ 2 ]

3 голосов
/ 24 апреля 2009

В своем комментарии вы говорите, что у вас есть вспомогательный метод с именем title. Это, вероятно, вызывает конфликт имен с переменной title.

Переименуйте вашу переменную заголовка в page_title. Измените его вверху, перед списком сайтов и внизу, где он генерирует ссылки.

1 голос
/ 06 сентября 2010

В качестве альтернативы ... почему вам нужно использовать «<<», а не просто «+». Может быть так, что << пытается добавить host_with_port в массив, содержащий строку протокола (т. Е. Он изменяет замороженную строку с именем «protocol» вместо простого добавления двух вместе) и то же самое со строкой request_uri в host_with_port. </p>

Просто используйте + для конкатенации, и они перестанут пытаться изменить строки и просто сложат их вместе, прежде чем пройти через u (), например:

current_uri = u(request.protocol + request.host_with_port + request.request_uri)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...