【问题标题】:Rails Understanding Associations Conceptually (Rendering and Posting)Rails 从概念上理解关联(渲染和发布)
【发布时间】: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


    【解决方案1】:

    将集合传递给渲染与每个说法的关联关系不大 - 您应该咨询Layouts & Rendering guide

    当您使用集合(模型实例数组)调用 render 时,Rails 会创建一个循环并使用 model name 和约定为集合的每个成员找到正确的部分。

    Rails 不在乎集合来自关联。

    补充:

    由于 List 和 Item 之间的关系是双向的,因此您始终可以通过 item.list 访问 item 所属的列表:

    # views/items/_item.html.erb
    <div id="tab_<%= item.list.id %>" class="col s12">
      <%= item.name %>
    </div>
    

    还请注意,我删除了 ID 开头的 #,因为它是元素 ID 的无效字符。

    【讨论】:

    • 我编辑并更新了我的帖子,以更具体地说明我在寻找什么。感谢您提供有关布局和渲染的提示。我真的很关心协会的问题。实际上,我的代码中有 s %>,但是我在凭记忆发帖时搞砸了。
    • 非常感谢。我不敢相信我忽略了您在答案中添加的内容如此简单的事情。我真的非常感谢它。
    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多