J'utilise postgresql et rails 4.2 pour le développement de mon application.rails rollback résultats résultats dans l'ID discontinu
Voici la question:
Lorsqu'un modèle d'utilisateur est créé, j'ai besoin de deux autres modèles associés au modèle de l'utilisateur à créer à temps: modèle de profil et le modèle user_behavior. En cas de maintenir la cohérence des dossiers, la transaction est utilisée comme ceci:
begin
@new_user = User.new
@new_user.transaction do
@new_user.update_attributes!(users_params)
@new_user.profile = Profile.create!(profiles_params)
@new_user.user_behavior = UserBehavior.create!
end
rescue ActiveRecord::RecordInvalid => exception
render_response_msg(4003, { message: exception.message })
rescue ArgumentError => exception
render_response_msg(4003, { message: "invalid parameters" })
end
@new_user
deux modèle de l'utilisateur et le modèle de profil a quelques validations
problème 1. J'utilise une variable d'instance @new_user à apporter le nouvel enregistrement de l'utilisateur créé de la portée de la transaction, je ne suis pas sûr que ce soit une méthode générique pour le faire, d'autres idées? problème
2. lorsque le params utilisateur est bon, il passe et créer un enregistrement utilisateur, puis le profil params est pas valide, fait toute la rollback transaction. Ensuite, j'ai trouvé l'ID (ID d'incrémentation automatique de base du modèle dans les rails) du modèle de l'utilisateur est discontinue. Par exemple, si elle échoue deux fois à cause des paramètres de profil, alors la transaction de succès va créer un modèle avec id = 3. Comment puis-je résoudre ce problème?
Pourquoi les espaces vides dans les valeurs 'id' sont-ils un problème? Ils seront uniques, c'est tout ce qui est vraiment garanti. –