Je rencontre des difficultés pour créer une nouvelle ligne de modèle dans la base de données à l'aide d'ActiveRecord dans une application Sinatra que je développe. L'objet en question est créé sans aucune erreur (en utilisant save !, aucune exception n'est déclenchée), mais la plupart des données que je spécifie pour l'enregistrement ne sont pas présentes.Problème lors de la création du modèle ActiveRecord: données manquantes de la sauvegarde
class ProjectMeta < ActiveRecord::Base
attr_accessor :completion_ratio, :num_stories, :num_completed_stories, :original_target_date, :current_target_date
...
def self.create_from_project(project)
meta = ProjectMeta.new
meta.project_id = project.id
meta.num_stories = project.num_stories
meta.num_completed_stories = project.num_completed_stories
meta.completion_ratio = ProjectMeta.calculate_ratio(project.num_completed_stories, project.num_stories)
meta.current_target_date = project.current_target_date
meta.save!
meta
end
...
end
Toutes les inspections sur les données de l'objet de projet, je vous envoie, ainsi que le nouvel objet méta je créais montrent que les données sont présentes. Mais quand je fais un meta.inspect
avant et après la sauvegarde, cela montre que toutes les données (sauf project_id) sont dans leur état par défaut (zéros). J'ai également vérifié meta.errors.nil?
et bien sûr, il n'y a pas d'erreurs après la sauvegarde. Ce qui est le plus étonnant, c'est que si je me retourne et que j'obtiens une nouvelle méta-instance avec ce project_id et que j'entre les données, cela ne gêne pas la base de données.
Cela me frustre parce que j'ai construit plusieurs sites dans Rails et Sinatra avec ActiveRecord. Ce seul problème me laisse complètement perplexe. Quelqu'un peut-il me dire ce que je fais mal?
J'ai oublié de mentionner que j'ai essayé toutes les incantations de création auxquelles je peux penser: ProjectMeta.create (: project_id => project.id ...), ProjectMeta.create do ... end, etc ... – localshred