在JS视图中部分呈现的HTML是空的

时间:2015-06-08 20:35:39

标签: ruby-on-rails ruby-on-rails-4

我有一个模型Sessionhas_many ExperimentSessions。在sessions/show.js.erb我使用部分代码{/ 1}呈现Session的{​​{1}}

ExperimentSessions

这很有效。但是,我想把它放到自己的部分视图中以重用它。我有这个:

#/sessions/show.js.erb
<% out = '' %>
<% fields_for @session do |sess_f| %>
  <%  sess_f.fields_for :experiment_sessions, child_index: "", index:nil  do |f| %>
    <% out += j "<li class='list-group-item'>"%>
    <% out += j render partial: 'experiment_sessions/exp_sess', locals: {f:f}  %>
    <% out += j "</li>"%>
  <% end %>
<% end %>

并将其包含在#/sessions/_exp_sessions_li.html.erb <% fields_for session do |sess_f| %> <% sess_f.fields_for :experiment_sessions, child_index: "", index:nil do |f| %> <%= "<li class='list-group-item'>"%> <%= render partial: 'experiment_sessions/exp_sess', locals: {f:f} %> <%= "</li>"%> <% end%> <% end %>

show.js.erb

从日志中,没有错误,部分被渲染。但是,#/sessions/show.js.erb <% out = j(render(partial: 'exp_sessions_li', locals: {session: @session} )) %> 是空字符串。 为什么out会产生空输出?

<小时/> 修改:澄清日志

_exp_sessions_li.html.erb中的

logger.ap @session输出:

show.js.erb

#<Session:0x007fc4859748d8> { :id => 732187210, :recorded_on => Fri, 20 Mar 2015 00:00:00 EDT -04:00, :notes => "session_j_b_ 15", :created_at => Fri, 20 Mar 2015 00:00:00 EDT -04:00, :updated_at => Fri, 20 Mar 2015 00:00:00 EDT -04:00 } 也会显示这些对象。 logger.ap @session.experiment_sessions中也可以看到session。{/ 1>

Log表示部分渲染:

/sessions/_exp_sessions_li.html.erb

<小时/> 修改:向下钻取部分

用字符串替换Rendered experiment_sessions/_exp_sess.html.erb (0.7ms) Rendered experiment_sessions/_exp_sess.html.erb (0.6ms) Rendered sessions/_exp_sessions_li.html.erb (4.9ms) 的内容将呈现该字符串。此外,如果我将此文件编辑为

_exp_sessions_li.html.erb

只会在aa <% fields_for session do |sess_f| %> bb <% sess_f.fields_for :experiment_sessions, child_index: "", index:nil do |f| %> cc <%= "<li class='list-group-item'>"%> <%= render partial: 'experiment_sessions/exp_sess', locals: {f:f} %> [...] 中显示“aa”。所以out似乎吃了输出。请注意,日志仍然会显示fields_for

现在,如果我写exp_sess,输出中也会包含“<%= fields_for session do |sess_f| %>”。并添加bb其余部分。但是,原始HTML部分(<%= sess_f.fields_for ...)已转义。

1 个答案:

答案 0 :(得分:0)

好的,我的错误是不返回fields_for块的输出。

我的原始代码工作的原因是我将每行的输出添加到我的输出变量(包括j调用的输出,这是<li ...行通过ruby发送的唯一原因第一名)。

简单地写<%= fields_for ...解决了我的问题。