Rails: вопрос активной записи - PullRequest
0 голосов
/ 27 августа 2011

У меня есть следующие модели:

require 'books_projects.rb'

class Project < ActiveRecord::Base
  has_many :book_to_projects
  has_many :books, :through => :book_to_projects
end

require 'books_projects.rb'

class Book < ActiveRecord::Base
  has_many :book_to_projects
  has_many :projects, :through => :book_to_projects
end

books_projects.rb:

class BookToProject < ActiveRecord::Base
    set_table_name "books_projects"
    belongs_to :book
    belongs_to :project
end

В контроллере своих проектов я пытаюсь сделать это:

@projects = Project.find(:all, :include => [:books])

Я надеюсь вернуть вложенную структуру данных, которая будет выглядеть примерно так:

projects: [
  {
    ..,
    books: [
        {
          ..
        },
        {
          ..
        }
    ]
  }
]

Это не работает. Как мне этого добиться?

Кроме того, приведенные выше модельные отношения требуют использования has_and_belongs_to_many в проекте и книге вместо указания таблицы соединения?

Заранее спасибо!

Редактировать 1: У меня нет представления. Это действует только как служба REST. Я делаю следующее:

def index
  @projects = Project.find(:all, :include => [:books])

  respond_to do |format|
    format.xml  { render :xml => @projects }
    format.json { render :json => @projects}
  end
end

Это не приводит к выводу, который я ищу (упомянуто выше).

Ответы [ 2 ]

1 голос
/ 28 августа 2011

Так получается, что работает следующее:

def index
  @projects = Project.find(:all)

  respond_to do |format|
    format.json { render :json => @projects.to_json(:include => [:books]) }
  end
end

Может кто-нибудь сказать мне, почему это работает, а предыдущее - нет?

1 голос
/ 27 августа 2011

Ваш код делает именно то, что вы ожидаете.Проблема заключается в проверке того, что.

Попробуйте:

project = Project.find(:first)
project.books.loaded?

вернет false

project = Project.find(:first, :include => [:books])
project.books.loaded?

вернет true:)

Стремлениезагруженные ассоциации обычно не отображаются при осмотре объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...