Modifier plusieurs attributs d'un objet dans une seule ligne
Je me demandais, lorsque vous créez un objet bien souvent, vous pouvez définir plusieurs attributs en une seule ligne, par exemple:
@object = Model.new(:attr1=>"asdf", :attr2 => 13, :attr3 => "asdfasdfasfd")
Que faire si je veux utiliser find_or_create_by d'abord, et ensuite modifier d'autres attributs plus tard? En général, je dois utiliser plusieurs lignes par exemple:
@object = Modèle.find_or_create_by_attr1_and_attr2("faa", 13)
@objet.attr3 = "asdfasdf"
@objet.attr4 = "asdf"
Est-il possible de définir des attributs à l'aide d'un algorithme de hachage similaire à la façon dont le Modèle.nouvelle méthode accepte les paires clé-valeur? Je suis intéressé par ce parce que je serais en mesure de définir plusieurs attributs sur une seule ligne, comme:
@object = Model.find_or_create_by_attr1_and_attr2("asdf", 13)
@object.some_method(:attr3 => "asdfasdf", :attr4 => "asdfasdf")
Si quelqu'un a des idées, ce serait génial!
Vous devez vous connecter pour publier un commentaire.
Vous souhaitez utiliser
assign_attributes
ouupdate_attributes
:Si vous choisissez de
update_attributes
au lieu de cela, l'objet sera immédiatement enregistrées (dans l'attente des validations, bien sûr):serialize
méthode de classe de la nuit dernière. Quelle est la version de rails utilisez-vous?@object
avant d'avoir instancié, êtes-vous?attr_accessible
ne devrait pas techniquement, mais comme @veraticus noté c'est Vraiment une Bonne Idée...doute que c'est la question. Faire tous les attributs que vous essayez d'attribuer existent dans le modèle/de la table?Les méthodes que vous cherchez sont appelés
assign_attributes
ouupdate_attributes
.Il y a quelques soucis de sécurité avec l'utilisation de ces méthodes dans les applications Rails. Si vous allez utiliser soit l'un, en particulier dans un contrôleur, assurez-vous de consulter la documentation sur attr_accessible de sorte que des utilisateurs malveillants ne peuvent pas passer l'arbitraire de l'information dans les champs de modèle que vous préférez ne pas devenir de masse cessible.