Я смотрел учебник по рельсам от 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
Спасибо большое!
Надеюсь, это поможет. '' '' <% = 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