无法从控制器渲染局部

时间:2019-04-12 12:46:47

标签: ruby-on-rails ruby

我正在开发一种博客,如果条件为真,我希望从控制器中渲染一部分。

这是我的控制器方法:

    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”,但与其他方法却没有相同... 我试图更改并删除条件,但没有成功:/

请,我想知道为什么我不能渲染它 谢谢!

2 个答案:

答案 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之类的东西