【问题标题】:Nested output with related models具有相关模型的嵌套输出
【发布时间】:2011-01-07 20:44:59
【问题描述】:

我有一个模型类别和一个模型 Weblink。类别 has_many Weblink 和 Weblink belongs_to 类别。现在我想在一个视图中显示所有类别,并在一个类别中显示属于该类别的所有网络链接,链接如下:

 <ul> 

  • 在我的控制器中:

       @categories = Category.all
    

    @weblinks = Weblink.all 这显示了每个类别和每个类别中的所有网络链接,而不仅仅是属于特定类别的链接。我该如何解决这个问题?

  • 【问题讨论】:

      标签: ruby-on-rails


      【解决方案1】:

      您的视图代码应如下所示

      <% @categories.each do |category| %>
         <%= category.name >
         <% category.weblinks.each do |weblink| %>
            <%= link_to weblink.name, weblink.link_url %>
         <% end -%>
      <% end -%>
      

      它是您的控制器,在查询所有类别时,您还应该包括 weblinks 模型,如下所示:

      @categories = Category.all(:include => :weblinks)
      

      【讨论】:

        【解决方案2】:

        使用通过 has_many 获得的宏将内部循环范围限定为外部类别:

        <% @categories.each do |category| %>
          <%= category.category_name %>
          <% category.weblinks.each do |weblink| %>
            <%= link_to weblink.link_name, weblink.link_url %>
          <% end %>
        <% end %>
        

        【讨论】:

        • 但是我必须在控制器中添加一个关系?我不能只说:@categories = Category.all 和 @weblinks = Weblink.all?
        • 我在 Category 类中说过“has_many :weblinks”,在 Weblink 中说过“belongs_to :category”,然后对于给定的 Category 实例,Category#weblinks 要么检索所有具有正确的 web 链接来自数据库的 category_id 或返回之前检索到的网络链接(例如,如果您在控制器中执行 Category.all 时使用了 ":include => :weblinks",正如 Victor 所建议的那样)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-30
        • 1970-01-01
        • 2021-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-17
        相关资源
        最近更新 更多