Rails 5 - 包括不起作用的嵌套关联

时间:2016-10-24 03:21:29

标签: ruby-on-rails ruby activerecord associations ruby-on-rails-5

我有两个简单的模型:

  1. note.rb
  2. :title -> string, :content -> string has_and_belongs_to_many :tags, join_table: :tags_notes accepts_nested_attributes_for :tags

    1. tag.rb
    2. :name -> string has_and_belongs_to_many :notes, join_table: :tags_notes

      两个模型都通过has_and_belongs_to_many关系连接。 如上所述,关联表称为tags_notes。 好吧,我在这里遇到的问题是,在我的RESTful控制器中,要记笔记,我有这个:

      获取/api/notes 这只返回Note对象:

      [
          {
              "id": 1,
              "title": "12231",
              "content": "121213"
          },
          {
              "id": 2,
              "title": "test",
              "content": "testtest"
          }
      ]
      

      但是,每个音符都有tags,我想将这些音符转储到响应中,如下所示:

           [
              {
                  "id": 1,
                  "title": "12231",
                  "content": "121213",
                  tags: [
                    {
                       "name": "test",
                       "id": 1
                    },
                    { 
                      ...
                    } 
                  ]
      
              },
               ...
          ]
      

      在我的控制器中,我试过了 Note.includes(:tags)

      当前控制器代码: def index notes = Note.includes(:tags) render json: notes, status: :ok end

      他们似乎只返回notes,而没有tagsNote.eager_load(:tags)的情况也是如此。我做错了什么?找不到足以帮助我解决此问题的文档。 如果有人可以帮助我,我将不胜感激。

      非常感谢。

1 个答案:

答案 0 :(得分:2)

在发布我的问题后不久,我自己找到了答案。 include必须进入render.

所以控制器代码

  def index
    notes = Note.all
    render json: notes, :include => :tags, status: :ok
  end

似乎可以做到这一点!