【发布时间】:2015-07-23 23:54:51
【问题描述】:
我阅读了有关关联的 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,但是当有多个列表时,rails 怎么知道将它们与下面的关联项目分开?在我的脑海中,当我看到这段代码时,我预计输出如下:
<ol>
List(a)
List(b)
List(c)
<li>item(a)</li>
<li>item(b)</li>
</ol>
我要做的是将每个列表呈现为选项卡并将关联的项目呈现为选项卡内容。最终,我有多个不同的 List 类型模型作为选项卡并匹配多个不同的 Item 类型模型以呈现为选项卡内容。
编辑:我摆脱了我的第二个问题,因为帖子很长,可能是单独的帖子。重申上述内容,如何获取上述集合并将其成功呈现在列表是选项卡的选项卡中,并且关联的项目呈现为内容? 如果我在我的用户/节目中使用这样的代码,我会遇到问题:
<div class="row">
<div class="col s12">
<ul class="tabs">
<%= render @lists %>
</ul>
</div>
<%=render @items %>
</div>
列表/_list
<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>
如果我尝试这个,那么我的 item partial 会给我一个错误,因为我无法调用 list.id,它只会渲染我的所有项目,而不会将它们显示为与 Lists 关联的集合。如果我嵌套它并将所有内容放在列表部分中的 之后,则集合可以工作,但结束标签最终会导致问题。我不知道如何解决这个问题。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 activerecord associations has-many