3 votes

rails 3.1 insertion ou mise à jour d'un enregistrement actif

Je suis nouveau sur les rails.

Existe-t-il un moyen simple, dans un enregistrement actif, de lui transmettre un hachage de données et, si l'enregistrement existe, de le mettre à jour, et s'il n'existe pas, de le créer ?

data = {}
data["my_id"] = 356345
data["description"] = "test123"

w = Descriptions.new(data)

Idéalement, si j'exécutais le programme ci-dessus, il n'y aurait qu'un seul enregistrement, et non plusieurs enregistrements à chaque fois que je l'exécute.

11voto

BananaNeil Points 1351

En supposant que vous voulez que le bit "my_id" soit unique, vous pouvez exécuter

Descriptions.find_or_create_by_my_id(data["my_id"]).update_attributes(data)

0voto

Manish Shrivastava Points 4380

Un objet ActiveRecord dans Rails conserve son identité dans le paramètre ID. Si l'ID est défini, Rails saura mettre à jour l'enregistrement dans la base de données avec cet ID.

save est, en fait, le principal moyen de créer, de mettre à jour ou d'enregistrer de quelque manière que ce soit un objet dans la base de données. D'autres méthodes comme update_attributes sont juste du sucre qui utilise save en leur cœur.

Oui, il y a beaucoup de bonnes choses que vous obtiendrez. ModelName.find_or_create_by_name("Summer")

Mais si vous passez Id dans save qui sera mis à jour et si id n'est pas passé, il sera create données.

Toujours, la clé primaire dans Rails devrait être "id" mais vous avez utilisé "my_id", ce qui peut aussi être le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X