我有一个模型Session
,has_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 ...
)已转义。
答案 0 :(得分:0)
好的,我的错误是不返回fields_for
块的输出。
我的原始代码工作的原因是我将每行的输出添加到我的输出变量(包括j
调用的输出,这是<li ...
行通过ruby发送的唯一原因第一名)。
简单地写<%= fields_for
...解决了我的问题。