Вот метод контроллера отображения сообщений для окна домашнего индекса, где описан шаблон:
@sections = ['technology', 'nature']
@briefsections = [['','','','',''], ['','','','','']]
@sections.each_with_index do |section, i|
@tag = Tag.where(name: section).first_or_create!
@tag.posts.each_with_index do |post, num|
@briefsections[i][num] = post || []
end
end
У каждого сообщения есть теги, поэтому у каждого тега есть сообщения, я должен добавить order_by, созданный впо убыванию и разделитель только для захвата 5 сообщений.и шаблон представления
<% @sections.each do |section| %>
<% @briefsections.each do |post| %>
<%= post.title %>
<% end %>
<% end %>
У меня был метод контроллера, подобный этому ранее, но после ошибки решил изменить его, хотя в ошибках было только так много советов, чтобы включать:
@sections = ['technology', 'nature']
@briefsections = ['', '']
@sections.each_with_index do |section, i|
@tag = Tag.where(name: section).first_or_create!
@briefsections[i] = @tag.posts || []
end
Первый выдает эту ошибку при просмотре из браузера, когда сервер работает:
undefined method `title' for ["", "", "", "", ""]:Array
А второй выдает эту ошибку в той же ситуации:
undefined method `title' for #<ActiveRecord::Associations::CollectionProxy []>
Я бы предпочелзахватите их в контроллере, чем итерируйте цикл в шаблоне, потому что мне нужно повторно использовать метод в другом окне контроллера.
Я привык к python, где вы могли бы просто вставить это в массив.Мне нужно только 5 постов, если это тоже возможная команда, только то, что от переменной требуется только такое количество, может сделать ее не просто прокси-сервером коллекции, а не собственной активной моделью записи.
Как надежно перемещатьсячерез многие ко многим, поэтому я могу перебирать их в шаблоне.Вложенные для циклов важны для легко воспроизводимых иерархий отображения, что является наиболее распространенным использованием структуры div, поэтому преодоление этого препятствия может применяться для гораздо большей части проекта.