Viele Rails-Helfer verwenden einen idiomatischen Options-Hash als letztes Argument; Ruby fügt automatisch zusätzliche Methodenargumente in diesen Hash ein. Oft möchte ich ein Element bedingt einfügen oder einen Helper schreiben, der das Element bereitstellt. Zwei Beispiele in Pseudo-Ruby:
link_to "Example 1", "http://www.example.com", needs_confirmation? ? :confirm => "Are you sure?" : nil # syntax error; nil can't be a hash element
o
link_to "Example 2", "http://www.example.com", unique_link_id
# I don't want to return a hash; I want to return an element of a hash
def unique_link_id
:id => "our_link_#{user.id}" # Syntax error
{:id => "our_link_#{user.id}"} # valid, but returns a hash that ends up being an element of the options hash
{:id => "our_link_#{user.id}"}.flatten_into_my_parent_hash # What's in my brain
end
Gibt es eine elegante Möglichkeit, dies zu tun? Ich kann die Rails-Helfer nicht kontrollieren, offensichtlich, so kann ich nicht zwingen, den Hash zu glätten. (Äh, nicht, dass es eine Hash#flatten
Methode, aber selbst wenn es eine gäbe.)
Ich kann den Hash als Variable vor dem Methodenaufruf erstellen, natürlich, und optional Elemente hinzufügen, aber... ick.
Nehmen wir an, dass es sich um erfundene Beispiele handelt, und gehen wir davon aus, dass die Helfer es nicht zulassen würden :confirm => nil
o :id => nil
und dass unique_link_id
Vielleicht sollten Sie die ID weglassen. Ich bin mehr daran interessiert, in der Hash-Syntax als in ein Rails-Problem zu lösen.
Irgendjemand?