无法修改冻结的字符串

时间:2009-04-23 11:42:11

标签: ruby-on-rails

我在

的视图中使用以下代码

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

This is the pastie code

但是我收到以下错误:

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 个答案:

答案 0 :(得分:3)

在你的评论中,你说你有一个名为title的帮助方法。这可能导致名称与title变量发生冲突。

将标题变量重命名为page_title。在站点列表之前的顶部更改它,在底部更改它生成链接。

答案 1 :(得分:1)

或者......为什么你需要使用“&lt;&lt;”为什么不只是“+”。 它可能是&lt;&lt;正在尝试将host_with_port添加到持有协议字符串的数组中(即它正在修改名为“protocol”的冻结字符串,而不是仅将两者一起添加)和request_uri字符串中的相同内容添加到host_with_port中。

只需使用+进行连接,他们将停止尝试修改字符串,然后在通过u()之前将它们添加到一起,例如:

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