09-09-2011, 06:00 AM
(Modification du message : 09-09-2011, 06:08 AM par Sephi-Chan.)
(08-09-2011, 09:58 PM)popayan a écrit : Je cherchais cette notation :
contract = team.contacts.create player_id: player.id,
duration: 3
j'ai eu beau avoir parcouru la doc, j'ai rien trouvé de semblable...
par contre le "contract =" devant est obligatoire?
L'affectation sert juste à mettre la valeur retournée — ici, une instance de la classe Contract — dans une variable.
Concernant la notation, create (qui sauvegarde l'objet en base, contrairement à build, qui affecte juste les différents attributs) peut prendre en argument un hash d'attributs. En appelant cette méthode sur l'association, Rails affecte automatiquement la foreign key (puisqu'on construit un contrat pour la team, il sait quel est le team_id). Cf. ActiveRecord::Associations::ClassMethods où tu verras les méthodes pour chaque type d'association (belongs_to, has_one, has_many) ou le guide sur les associations.
En Ruby, les parenthèses et accolades peuvent être optionnelles (tant que ce n'est pas ambigu). Ainsi, les notations suivantes sont rigoureusement équivalentes.
team.contacts.create({ player_id: player.id, duration: 3 })
team.contacts.create(player_id: player.id, duration: 3)
team.contacts.create { player_id: player.id, duration: 3 }
team.contacts.create player_id: player.id, duration: 3