我试图在我的Rails 3.2.13应用程序中实现用户反馈收集系统。Rails无限循环 - 堆栈级别太深
以我_footer部分(其在布局/ application.html.erb文件渲染),我已经包括反馈形式如下:
布局/ _footer.html.erb:
<footer class="footer dropup pull-right">
<nav>
<div id="fat-menu" class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
We'd Love Your Feedback!<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li></li>
<div id="feedback_form">
<%= render 'feedbacks/form' %>
</div>
</ul>
</nav>
</footer>
反馈/ _form.html.erb:
<% @feedback = Feedback.new %>
<%= form_for(@feedback) do |f| %>
<% if signed_in? %>
<%= f.hidden_field :user_id %>
<% end %>
<div class="feedback_text">
<%= f.text_area :text %>
</div>
<div id="submit_feedback"><%= f.submit "Submit", class: "btn btn-primary" %></div>
<% end %>
<script>
$('#submit_feedback').click(function(){
$('#feedback_form').html("<%= escape_javascript(render 'feedbacks/after_submit') %>");
});
</script>
反馈/ _after_submit.html.erb:
<div id="new_feeeback">
Submit a new feedback.
</div>
<script>
$('#new_feeeback').click(function(){
$('#feedback_form').html("<%= escape_javascript(render 'feedbacks/form') %>");
});
</script>
我觉得像这样一个无限循环,必须对我的情况下,由于渲染未被触发,直到用户点击相应的斑点。
但Rails会不会让我这样做,因为我得到了
stack level too deep
错误。请让我知道是否有解决方法,或完全更好的方法。这将非常感谢!
这里的痕迹:
Trace of template inclusion: app/views/feedbacks/_after_submit.html.erb, app/views/feedbacks/_form.html.erb, app/views/feedbacks/_after_submit.html.erb, app/views/feedbacks/_form.html.erb, app/views/feedbacks/_after_submit.html.erb, app/views/feedbacks/_form.html.erb, app/views/feedbacks/_after_submit.html.erb... and so on
附:我知道标签不是最好的做法,我现在这样做只是为了更清楚地说明我的方法。
你对渲染发生的时间的假设是错误的。所有的渲染都是在页面第一次渲染时发生的。 –
@johnYeung请添加回溯。 –