Sie bekommen von Rubys syntaktischer Zucker verwechselt (die Schienen verwendet überschwänglich). Lassen Sie mich das kurz erklären, bevor Sie Ihre Frage beantworten.
Wenn eine rubin Funktion einen einzigen Parameter, die ein Hash ist:
def foo(options)
#options is a hash with parameters inside
end
können Sie ‚vergessen‘ die Klammer/Klammern zu setzen und es so nennen:
foo :param => value, :param2 => value
Rubin füllen Sie die Lücken aus und verstehen, dass das, was Sie versuchen zu erreichen, ist dies:
Nun zu Ihrer Frage: link_to
dauert zwei optionale Hashes - eine heißt options
und die andere html_options
. Sie können sich vorstellen, es wie folgt definiert (dies eine Annäherung ist, es ist viel komplexer)
def link_to(name, options, html_options)
...
end
Nun, wenn Sie es auf diese Weise aufrufen:
link_to 'Comments', :name => 'Comments'
Ruby ein wenig verwirrt. Er wird versuchen, für Sie „um die Lücken zu füllen out“, aber falsch:
link_to('Comments', {:name => 'Comments'}, {}) # incorrect
Es wird denken, dass name => 'Comments'
Teil zu Optionen gehört, nicht zu html_options
!
Sie müssen Ruby helfen, indem Sie die Lücken selbst ausfüllen. Legen Sie die gesamte Klammer an ihrem Platz und es verhält sich wie erwartet:
link_to('Comments', {}, {:name => 'Comments'}) # correct
Sie können tatsächlich den letzten Satz von Klammern entfernen, wenn Sie wollen:
link_to("Comments", {}, :name => "comments") # also correct
Um html_options zu verwenden, müssen Sie das verlassen müssen erste Reihe von Klammern, obwohl.Zum Beispiel müssen Sie dies für eine Verbindung mit Bestätigungsmeldung und Namen tun:
link_to("Comments", {:confirm => 'Sure?'}, :name => "comments")
Andere Schienen Helfer haben einen ähnlichen Aufbau (d form_for
, collection_select
), so sollten Sie diese Technik erlernen. Fügen Sie im Zweifelsfall einfach alle Klammern hinzu.
Sorry für die nicht verstehen, was Sie * deutlich * schrieb! Mein Fehler! Freut mich, dass du die Antwort bekommen hast, die du brauchst. Ich habe meins entfernt, um niemanden zu verwirren :) –