1

我正在使用 Rails 3.2 中的一个项目并使用 Ryan Bates 的 PrivatePub gem(Faye 包装器)。我在将 render_to_string 的结果传递到 Publish 方法的 javascript 时遇到问题。到目前为止,我还没有浏览过 Google、render_to_string 文档或 Faye 文档。

在我的控制器中,我有以下内容:

def my_action
  html_text = render_to_string :partial => 'my_partial', :formats => [:html]
  puts html_text
  PrivatePub.publish_to("/#{my_channel}", "$('#my_id').html('#{html_text}');")
end

这不起作用(订阅页面上的 div 不会更新)。但是,将 my_partial 中相同内容的字符串分配给 html_text,它可以正常工作(div 更新):

def my_action
  html_text = "<h3>Testing this</h3>" #This is the only change from above
  puts html_text
  PrivatePub.publish_to("/#{my_channel}", "$('#my_id').html('#{html_text}');")
end

查看服务器日志,我可以看到在任何一种情况下,“puts html_text”输出看起来都完全相同。

不确定这是否重要,但我的控制器只响应 json,并且我正在使用 curl 将测试 POST 推送到此操作。

部分很简单:

<h3>Testing this</h3>

我必须在这里遗漏一些简单的东西,但我不明白为什么 render_to_string 会给我一个不同的结果,只是分配一个字符串变量。

有人有想法么?

谢谢!

4

1 回答 1

0

我得到了这个工作,虽然我不完全确定为什么。这是我所做的:

根据这篇文章中的一些讨论,我在代码中添加了以下内容,以便更好地了解正在发生的事情:

    html_text = render_to_string :partial => 'my_partial', :formats => [:html]
    test_text = "<h3>Testing this</h3>"
    puts "****************************************"
    puts html_text
    puts test_text
    puts html_text.bytes.count
    puts test_text.bytes.count
    puts "-" + html_text + "-"
    puts "****************************************"
    PrivatePub.publish_to("/#{my_channel}", "$('#my_id').html('#{html_text}');")

在服务器日志中,我注意到 html_text 比 test_text 多一个字节。我还注意到 html_text 上的结尾“-”显示在单独的行上。

-<h3>Testing this</h3>
-

所以我加了

html_text.strip!

在 render_to_string 调用之后,它突然起作用了!现在的问题是弄清楚到底是什么字节导致这不起作用(因为我不能放过它!)。有人对那可能是什么有任何想法吗?

编辑

我弄清楚是什么导致了这个问题,所以我会解释一下,以防其他人遇到类似的问题。

我扩大了我的部分看起来像这样

<h3>Testing this</h3>
One
Two

事情又停止了工作。那是因为/n里面有字符串。所以我替换 html_text.strip!html_text.gsub!(/\n/, '<br/>'),现在一切正常。有时,深入思考只会混淆简单的答案!

不确定这是否是解决此问题的最佳 Railsy 方法,但它完成了工作。如果有人知道更好的方法来做到这一点,我很想听听!

于 2012-12-21T15:52:33.070 回答