J'ai une situation où un attribut peut être créé via une API JSON. Mais une fois qu'il est créé, je veux l'empêcher d'être mis à jour. Cette contrainte provoque l'insuffisance de ma première solution, qui utilise attr_accessible
. Existe-t-il une bonne façon de gérer ce type de situation dans les rails, ou dois-je effectuer une vérification manuelle dans la méthode update
?Dans Rails, comment limiter les attributs pouvant être mis à jour sans les empêcher d'être créés?
1
A
Répondre
3
Vous pouvez utiliser attr_readonly
, cela permettra à la valeur à régler sur la création, mais ignoré à la mise à jour.
Exemple:
class User < ActiveRecord::Base
attr_accessible :name
attr_readonly :name
end
> User.create(name: "lorem")
> u = User.first
=> #<User id: 1, name: "lorem">
> u.name = "ipsum"
=> "ipsum"
> u.save
=> true
> User.first.name
=> "lorem"
0
Il n'y a pas une belle façon de le faire pour autant que je sache, vous devez écrire un filtre personnalisé
before_update :prevent_attributes_update
def prevent_attribute_updates
%w(attr1, attr2).each do |a|
send("#{attr1}=", send("#{attr1}_was")) unless self.send("#{attr1}_was").blank?
end
end
Questions connexes
- 1. Conception de base de données pour les enregistrements séquentiels pouvant être mis à jour
- 2. Doit être mis à jour WinForm (processus séparé) pour rendre les contrôles personnalisés nouvellement créés
- 3. créer un programme pouvant être mis à jour en C# (mise à jour en ligne)
- 4. Les formulaires liés aux jeux d'enregistrements ADO pouvant être mis à jour ne peuvent pas être mis à jour lorsque la source inclut un JOIN
- 5. Les attributs sans nom ne plus poster
- 6. Comment puis-je mettre à niveau tous les paquets pouvant être mis à jour en utilisant ppm?
- 7. Rails Formulaire ne mettant pas à jour les attributs
- 8. Sites Web ASP.NET faisant référence à un assemblage commun et pouvant être mis à jour
- 9. Conception d'un magasin de données pouvant être mis à jour et interrogé en même temps
- 10. Compteur global système pouvant être mis à jour par programmation (sur différentes versions de Linux)?
- 11. Pourquoi les éléments d'interface utilisateur doivent-ils toujours être créés/mis à jour à partir du thread d'interface utilisateur?
- 12. comment limiter les enregistrements mis dans la clause SQL WHERE
- 13. Conseils sur la création d'un économiseur d'écran pouvant être mis à jour via un CMS
- 14. Rails Ajax non mis à jour
- 15. Rails: update_attributes ne met pas à jour tous les attributs
- 16. Protéger les attributs à mettre à jour
- 17. Oracle: insertion dans une vue pouvant être mise à jour
- 18. Comment limiter la mise à jour file_field si déjà avoir la valeur dans les rails d'édition
- 19. Comment les rails params sont-ils créés?
- 20. les rails valident les attributs imbriqués
- 21. Comment vérifier les gemmes prêtes à être mises à jour?
- 22. Comment importer les enregistrements mis à jour dans filemaker
- 23. Comment obtenir les enregistrements mis à jour dans django
- 24. Comment identifier les contrôles mis à jour dans UpdatePanel?
- 25. Question sur les variables pouvant être lissées dans AS3
- 26. javax.net.ssl.trustStore ne pas être mis à jour
- 27. NSData doit être mis à jour
- 28. Champs pouvant être annulés dans la base de données mais obligeant les utilisateurs à les saisir
- 29. Rails - étendre les attributs méthode
- 30. Liste des champs pouvant être mis à jour grâce aux fonctionnalités de mises à jour en temps réel
Merci! Je savais qu'il devait y avoir un moyen facile :) –