这是我的视图的样子(请忽略开始和结束标记):
@obj1.leaves.each do |l|
<div id = "form">
if <some_condition>
render :partial => 'shared/view1', :locals => { :l => l }
else
render :partial => 'shared/view2', :locals => { :l => l }
end
</div>
end
view1上的最后一个动作导致view2显示,通过ajax反之亦然。但是,当呈现view1或view2时,局部变量'l'不再被识别,并抛出一个错误,导致表单不显示(手动页面刷新除外)。我怎么做才能使表单工作并持久化我的"l"?
提前感谢您的帮助。
编辑:我的create.js.erb文件为view1 (view2实际上是销毁方法,反之亦然):
$("#form").replaceWith("<%= escape_javascript(render('shared/view2')).html_safe %>")
我的实际视图:
<%= form_for([l, l.likes.build], :remote => true) do |f| %>
<div class="actions"><%= f.submit "Like" %></div>
<% end %>
(不是答案)
@obj1.leaves.each do |l|
partial = <some_condition> ? 'shared/view1' : 'shared/view2'
render :partial => partial, :locals => { :l => l }
end
Locals就是这样;当地。我不清楚你在说什么Ajax——replaceWith
只是替换内容,它不发出请求。如果它都在同一个请求中,您可以使l
成为一个实例变量(@l
),看看这是否清除了事情。