2017-04-09 10 views
1

はい、すでにhereをチェックしました。それはうまくいかなかった。一部のレンダリングのコレクションが1回多すぎます

のRails: 5.0.2 ルビー: 2.4.0

私はコメントのコレクションを持っており、それが呼び出されるたびに、それはあまりにも多くの1時間をレンダリングして、空のコメントは常に他の人の下に表示されますコメントが存在しない場合、空の1つがまだレンダリングされます。ここで

はコードです:

表示部分

<h2>Add a comment:</h2> 
<%= render 'comments/form' %> 

<h2>Comments</h2> 
<%= render @video.comments || "There are no comments yet." %> 

フォーム部分

<%= form_for([@video, @video.comments.new]) do |f| %> 
    <p> 
     <%= f.label :name %><br> 
     <%= f.text_field :commenter %> 
    </p> 
    <p> 
     <%= f.label :body %><br> 
     <%= f.text_area :body %> 
    </p> 
    <p> 
     <%= f.submit %> 
    </p> 
<% end %> 

コメント

<p> 
    <strong>Name:</strong> 
    <%= comment.commenter %> 
</p> 

<p> 
    <strong>Comment:</strong> 
    <%= comment.body %> 
</p> 

<p> 
    <%= link_to 'Destroy Comment', [comment.video, comment], 
       method: :delete, 
       data: { confirm: 'Are you sure?' } %> 
</p> 

コントローラ

def create 
    @video = Video.find(params[:video_id]) 
    @comment = @video.comments.create(comment_params) 
    redirect_to video_path(@video) 
end 

def destroy 
    @video = Video.find(params[:video_id]) 
    @comment = @video.comments.find(params[:id]) 
    @comment.destroy 
    redirect_to video_path(@video) 
end 

private 
def comment_params 
    params.require(:comment).permit(:commenter, :body) 
end 

これは部分的に余分な時間をレンダリングする理由誰でも知っていますか?

答えて

1

あなたはコメント協会に.scopeを呼び出そうことがあります。コメントがない場合

<%= render @video.comments.scope || "There are no comments yet." %> 
+0

これは実際には空のコメントを削除する作業は、しかし、今それはまだ出力は「コメントはまだありませんでした。 "私はこの機能を提供するjavascript関数を作成することができますが、私はする必要はありません。 –

+0

まあ、 'if-else'条件を使ってコメントを表示することで、javascriptなしでこれを実現することができます:<%if @ video.comments.scope.any? %>など... –

関連する問題