我正在开发一种博客,如果条件为真,我希望从控制器中渲染一部分。
这是我的控制器方法:
def comments_session
render partial: 'comments/form' if signed_in?
render partial: 'comments/show'
end
这是我的观点:
<%= comments_session %>
这些是我的零件:
_show.html.erb
<% @post.comments.sort_by(&:created_at).reverse.each do |comment| %>
<div class="col-lg-12 mt-3 pt-3 border-top">
<% if signed_in? %>
<% if current_user.username == comment.user.username %>
<%= link_to 'Excluir', post_comment_path(@post, comment), :class =>"btn btn-sm btn-danger btn_round float-right border-dark",
method: :delete, data: {confirm: "Deseja realmente excluir esse comentário?"} %>
<% else %>
<% end %>
<% else %>
<% end %>
<h6><strong>~ <%= comment.user.username %></strong></h6>
<p class="comment"><%= comment.body %></p>
<p class="lead distance_of_time"><small>
<%= time_ago_in_words(comment.created_at) %>
</small></p>
</div>
<% end %>
和_form.html.erb
<%= form_with(model: @comment, url: [@post, @comment], local: true) do |f| %>
<% if @comment.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(comment.errors.count, "error") %> prohibited this comment from being saved:</h2>
<ul>
<% comment.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="row">
<div class="col-lg-10 form-group">
<%= f.text_area :body, :class =>"form-control", :placeholder =>"Escreva o Que Quiser!" %>
</div>
<div class="col-lg-1 form-group">
<%= f.submit "Comentar", :class =>"btn btn-lg btn-primary border-dark text-light" %>
</div>
</div>
<% end %>
该方法完美地呈现了“ _show.html.erb”,但与其他方法却没有相同... 我试图更改并删除条件,但没有成功:/
请,我想知道为什么我不能渲染它 谢谢!
答案 0 :(得分:2)
Rails不允许在控制器中渲染多个局部。
def comments_session
if signed_in?
render partial: 'comments/form'
else
render partial: 'comments/show'
end
end
答案 1 :(得分:0)
您可以尝试这种方式吗?
def comments_session
return render partial: 'comments/form' if signed_in?
render partial: 'comments/show'
end
我认为您收到DoubleRenderError
之类的东西