Je les modèles suivants:Rails: Active Record Question
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
Dans mon contrôleur de projets, je suis en train de le faire:
@projects = Project.find(:all, :include => [:books])
Mon espoir est d'obtenir une structure de données imbriquée qui ressemble à quelque chose comme:
projects: [
{
..,
books: [
{
..
},
{
..
}
]
}
]
Cela ne fonctionne pas. Comment puis-je atteindre cet objectif?
De même, la relation de modèle ci-dessus appelle-t-elle l'utilisation de has_and_belongs_to_many
dans le projet et dans le livre au lieu de spécifier la table de jointure?
Merci d'avance!
Édition 1: Je n'ai pas de vue. Cela agit comme un service REST seulement. Je fais ce qui suit:
def index
@projects = Project.find(:all, :include => [:books])
respond_to do |format|
format.xml { render :xml => @projects }
format.json { render :json => @projects}
end
end
Cela ne produit pas la sortie que je suis à la recherche (mentionné ci-dessus).
Eh bien, ça devrait marcher! essayez <% = debug @project%> dans votre vue, vous devriez voir une représentation yaml de votre objet avec les livres inclus – charlysisto
Si 'book_projects' n'a pas d'autres attributs, alors oui, utilisez' has_and_belongs_to_many'. En outre, je suis d'accord avec charlysisto: cela devrait-il fonctionner? Qu'est-ce qui ne fonctionne pas exactement? – Mischa
Puis-je vous demander pourquoi vous «allez à l'encontre du grain»? Pourquoi avez-vous un fichier 'book_projects.rb' qui définit' BookToProject', mais le nom de la table est 'book_projects'? Pourquoi exigez-vous ce fichier de vos deux autres modèles? Vous devriez seulement l'exiger une fois quelque part dans votre projet, mais pourquoi exigez-vous du tout? – theIV