Oui, la syntaxe correcte est navigate_to page: :inbox
.
Bien qu'il s'agisse d'un Ruby commun, il est court et équivalent pour plusieurs choses différentes. Tout d'abord, les accolades.
Vous êtes en train d'appeler :
navigate_to(page: :inbox)
Deuxièmement, le modèle d'argument par mot-clé provient des hachages comme arguments. Avant qu'il n'y ait des arguments de type mot-clé, une manière courante était de passer un hash[1], comme ceci :
def navigate_to(options)
page = options[:page]
end
navigate_to({ page: :inbox })
Mais lorsque le dernier argument d'un appel de méthode est un hash, on peut laisser de côté l'élément {}
.
Et enfin, les clés réelles dans le hachage. Il y a quelque temps (1.8 -> 1.9 IIRC), une version courte a été introduite pour les éléments suivants :
{ :page => 'Some Value' }
à savoir { page: 'Some Value' }
. Quand Some Value
est un symbole, qui devient { page: :inbox }
.
Donc, en prenant tout ça :
navigate_to page: :inbox
Originaire de :
navigate_to({ :page => :inbox })
Cela peut avoir plus de sens de le lire comme ça, ou de savoir que ça vient de là.
Et je sais que Ruby, ni les ruby-istes, n'aiment les bretelles, ()
Il n'est pas nécessaire de les ajouter, comme on peut le voir dans l'époustouflant DSL de rspec par exemple, mais je peux conseiller aux nouveaux développeurs de les ajouter. Cela rend souvent le code plus compréhensible.
navigate_to(page: :inbox)
est probablement plus facile à comprendre que navigate_to page: :inbox
surtout lorsque vous commencez à faire appel à d'autres méthodes : navigate_to page page_from_session :user
.
[1] Mais, il faut le souligner, ce n'est pas vraiment ce qui se passe ici. Les arguments de mot-clé et les arguments de hachage diffèrent, maintenant que nous avons des arguments de mot-clé. Cela montre simplement pourquoi la syntaxe est de cette façon.