2016-03-30 3 views
0

Я смотрел учебник по рельсам от mckenzie https://www.youtube.com/watch?v=BI_VnnOLSKY и не могу понять, как он делает комментарии для каждого сообщения. _form парциальные выглядит так:Как работают комментарии в блоге?

<%= form_for([@post, @post.comments.build]) do |f| %> 
<p> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
</p> 

<p> 
    <%= f.label :description %> 
    <%= f.text_area :description %> 
</p> 

<p> 
    <%= f.submit %> 
</p> 

<% end %> 

Так почему же он должен вызвать для этого [@post, @ post.comments.build] ??

Затем он делает еще один частичный для _comments, который выглядит следующим образом:

<div> 
    <h3><%= comment.name %></h3> 
    <p><%= comment.description %></p> 
</div> 

Итак, как же он сможет просто позвонить на «comment.name» без использования знака @, если нет цикла происходит как @ comment.each do | комментарий |

Затем он делает все, что в пост/show.html.erb, как это:

<h2><%= @post.comments.count %> Comments</h2> 
<%= render @post.comments %> 

Во второй строке, как это возможность вызвать для комментариев как метод просто принимая это за _comment частичной? ?

Наконец Heres как комментарии контроллер:

def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.create(comment_params) 

    redirect_to post_path(@post) 

end 

Спасибо большое!

+0

Надеюсь, это поможет. '' '' <% = form_for ([@ post, @ post.comments.build]) do | f | %> '' '' Сообщает об этом для сообщения post_comments_path (post_id). Это требует, чтобы у вас был этот маршрут и настройка контроллера. '' '' render @ post.comments '' '' Сообщает об этом для рендеринга коллекции, поскольку @ post.comments возвращает массив объектов ActiveRecord. По сути, он выполняет итерацию массива и отображает частичное для каждого экземпляра комментария. http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html – isaacsloan

ответ

0

Когда вы передаете массив render, как он это делает с render @post.comments, тогда возникает какая-то магия, и рельсы делают каждый комментарий, используя _comment частично. Все это описано в API.