Я прочитал руководство Rails по ассоциациям, а также ответил на кучу вопросов здесь, на SO и на Reddit, но я думаю, что просто концептуально не получаю ассоциаций. У меня есть две конкретные проблемы, которые я могу использовать в качестве примеров из приложения, над которым я работаю, но на самом деле я просто пытаюсь понять, что я делаю.
Модели для этих примеров:
List
belongs_to :user
has_many :items
Item
belongs_to :list
belongs_to :user
User
has_many :lists
has_many :items
Проблема 1: ассоциации рендеринга
Я знаю, что для отображения связанных ассоциаций в списке я могу сделать что-то вроде этого, на мой взгляд:
Users/show
<%= render @list %>
Lists/_list
<ol>
<%= list.name %>
<%= render list.items %>
</ol>
Items/_item
<li><%= item.name %></li>
Мне это кажется магией. Я знаю, что вызываю user.list, а затем list.item, но когда есть несколько списков, как рельсы узнают, как разделить их с соответствующими элементами под ними? В моей голове, когда я вижу этот код, я ожидаю следующего результата:
<ol>
List(a)
List(b)
List(c)
<li>item(a)</li>
<li>item(b)</li>
</ol>
То, что я пытаюсь сделать, это отображать каждый список как вкладку и отображать связанные элементы как содержимое вкладки. В конечном счете, у меня есть несколько разных моделей типа списка, которые я хочу использовать в качестве вкладок, и я сопоставляю несколько разных моделей типов элементов для отображения в виде содержимого вкладок.
Редактировать: я избавился от второй проблемы, так как сообщение было длинным и могло быть отдельным сообщением. Повторяя вышесказанное, как можно взять указанную выше коллекцию и успешно отобразить ее на вкладках, где списки являются вкладками, а связанные элементы отображаются как содержимое? У меня возникают проблемы, если я использую такой код в своих пользователях/шоу:
<div class="row">
<div class="col s12">
<ul class="tabs">
<%= render @lists %>
</ul>
</div>
<%=render @items %>
</div>
Списки/_список
<li class="tab col s3"><a href="#tab_<%=list.id%>"><%= list.name%></a></li>
Предметов/_item
<div id="#tab_<%=list.id%>" class="col s12"><%= item.name %></div>
Если я попытаюсь это сделать, то часть моего элемента выдаст мне ошибку, потому что я не могу вызвать list.id, и он просто отобразит все мои элементы, не отображая их как связанную коллекцию со списками. Если я вложу это и поставлю все после ‹%=списков рендеринга %> внутри частичного списка, тогда коллекции будут работать, но закрывающие теги в конечном итоге вызовут проблемы. Я не уверен, как решить эту проблему.