我正在使用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会给我一个简单的分配字符串变量的结果。
有人有什么想法吗?
谢谢!
答案 0 :(得分:0)
我有这个工作,虽然我不确定为什么。这是我做的:
基于this post中的一些讨论,我在代码中添加了以下内容,以便更好地了解发生了什么:
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方式,但它完成了工作。如果有人知道更好的方法,我很乐意听到!