Quel est le type de validation à inclure pour les modèles subordonnés? Par exemple, disons que vous avez des livres avec des chapitres. Le nombre de chapitres par livre est déterminé lors de la création du livre.Validation des relations de modèle dans les rails
class Book < ActiveRecord::Base
has_many :chapters
def build_chapters(count)
(1..count).each do |i|
chapters.build(:sequence_number => i)
end
end
end
class Chapter < ActiveRecord::Base
belongs_to :book
validates_presence_of :book_id, :sequence_number
end
class BooksController < ApplicationController
def create
@book = Book.new(params[:book])
@book.build_chapters(4) #to simplify example, hardcode number of chapters
@book.save
# View-related code omitted for simplicity
end
end
Quand je lance ce je reçois une erreur « chapitres est invalide » par chapitre (4 erreurs lorsque codées en dur comme dans l'exemple). Définir explicitement le: book_id dans l'appel de construction n'aide pas.
Cependant, si je sauvegarde le livre avant d'ajouter des chapitres cela fonctionne, pas d'erreurs. Si je retire la validation dans le chapitre cela fonctionne, pas d'erreurs. Mais aucune de ces solutions de contournement ne me rend heureux. Un livre ne devrait pas être autorisé à exister dans la base de données sans ses chapitres, et un chapitre ne devrait pas être autorisé à exister dans la base de données sans être lié à un livre. Quelle est la bonne façon de faire respecter les contraintes relationnelles? Je suis novice en matière de rubis et de rails, alors c'est tout à fait possible, je ne pense pas encore à rails-ese pour le moment. S'il vous plaît, édulcatez-moi.
Avez-vous des commentaires sur les raisons pour lesquelles la question a été rejetée? – Darryl