【问题标题】:Rails get dump of rendered viewRails 获取渲染视图的转储
【发布时间】:2012-04-02 11:06:52
【问题描述】:

如何在另一个视图中包含渲染响应,但已转储。

就像我目前正在使用的:

css: "<%= render :partial => "myurl/blah", :formats=> [:css], :layout => false %>",

(在渲染的 js 文件中,我正在创建一个 json 对象并包括各种其他文件。)

这里的响应是这样的:

css: "#utilities {width: 800px;}
#utilities p,
#utilities ul {margin-bottom: 1em;}
#utilities_scroll {height:500px; padding:0 10px 0 10px; overflow:scroll;}
#utilities_scroll_inner {width: 733px;}
#utilities-search-form {margin-top: 20px;} .. ."

但是我想像这样转储它:

css: "#utilities {width: 800px;}\n#utilities p,\n#utilities ul {margin-bottom:  .. "

编辑:

回应:

css : <%= eval("render :partial => 'myurl/blah', :formats=> [:css], :layout => false").dump %>

它正在转储 html,但方式有点不正确,

在 Rails 控制台中查看:

 a = "fdjasdlkfs 32$#%$#^$%^<>tv5$ ;'"  # => "fdjasdlkfs 32$#%$#^$%^<>tv5$ ;'" 
a.dump      #=> "\"fdjasdlkfs 32$#%$#^$%^<>tv5$ ;'\""

这将是正确的方式,但是,在我包含的行的 html 中,响应如下: (如果我在 myurl/blah.css 文件中有:"fdjasdlkfs 32$#%$#^$%^&lt;&gt;tv5$ ;'"

结果是

css : &quot;\&quot;fdjasdlkfs 32$#%$#^$%^&lt;&gt;tv5$ ;'\&quot;\n&quot;

看到&lt; &gt; " 在这两种情况下的转换非常不同..(我需要它按照第一种格式”

【问题讨论】:

  • 但这就是 ruby​​ 的语法...我如何将它与 rails 视图一起使用...?
  • 试试这个:css: 'myurl/blah', :formats=> [:css], :layout => false").dump %>
  • 我已经修改了问题,请看问题...

标签: ruby-on-rails ruby-on-rails-3 actionview


【解决方案1】:

使用 eval 。我以前从未尝试过,但它会起作用。

试试:

css : <%= eval("render :partial => 'myurl/blah', :formats=> [:css], :layout => false") %>

【讨论】:

  • css : eval("render :partial =&gt; "url/abc", :formats=&gt; [:css], :layout =&gt; false"), 按原样打印这一行,同时:` track: eval(" "url/xyz", :formats=> [:js] , :layout => false %>"),` 正在打印eval("my response from the rendered file as it is ")
  • 哎呀,你能不能试着编辑一个。我刚刚编辑了我的回复。
  • 仍然无法正常工作.. 现在响应与我之前得到的相同(如问题)...顺便说一句,我在哪里可以找到有关此的一些文档...
  • 不确定此类文档,但您可以使用 gsub 将新行替换为预期字符(例如:eval(...).gsub(/\n/,"\n"))。你能告诉我,你为什么要用这种格式回复。
  • 我渲染的主文件是 .js 文件,返回一个对象(按照 jsonp 格式)...假设我有:content : " &lt;div id="content-container"&gt; .......... " 作为其字段之一,它不会保留一个有效的对象。但如果它保持为:content :"&lt;div id=\"content-contatiner\"&gt; .......",这将是有效的对象,这就是为什么我需要将数据转储作为我要发送的对象中的键的值。
【解决方案2】:

感谢 Vik 的努力......但经过长时间的搜索,我最终成为:

css : <%= JSON.dump(render :partial => "abc/url", :formats=> [:css], :layout => false).html_safe %>
css: <%= eval("render :partial => 'blah/blah', :formats=> [:css], :layout => false").dump.html_safe%>,
css: <%= eval("render :partial => 'blah/blah', :formats=> [:css], :layout => false").to_json.html_safe%>,

作为问题的解决方案.... 我刚刚开始使用 Ruby、rails 并发现奇怪的是没有关于所有这些小东西的适当文档......希望这对某人有所帮助......

但在我的情况下,我最终将我的解决方案用作: (与问题有点不同) 在控制器中:

@cssrender = JSON.dump(render_to_string(:file => "blah/blah", :layout => false , :formats =>[:css]))

并且仅在css :&lt;%=@cssrender.html_safe%&gt;可见范围内

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多