我有以下型号:
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
这不会产生我正在寻找的输出(如上所述)。
答案 0 :(得分:1)
您的代码完全符合您的预期。问题在于验证。
试试这个:
project = Project.find(:first)
project.books.loaded?
将返回false
project = Project.find(:first, :include => [:books])
project.books.loaded?
会返回true:)
检查对象时,通常不会显示急切加载的关联。
答案 1 :(得分:1)
事实证明以下工作:
def index
@projects = Project.find(:all)
respond_to do |format|
format.json { render :json => @projects.to_json(:include => [:books]) }
end
end
有人可以告诉我为什么这样做而以前的那个没有?