多くのRailsヘルパは、最後の引数として慣用的なオプションのハッシュを使用します。 Rubyは追加のメソッド引数をそのハッシュに自動的に挿入します。私はしばしば、条件付きで要素を挿入したい、あるいはその要素を提供するヘルパーを記述したいと思っています。擬似Rubyで二つの例: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
または
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
これを行うには、いくつかのエレガントな方法はありますか?明らかにRailsヘルパーを制御することはできませんので、ハッシュを平らにすることはできません。 (Hash#flatten
メソッドがあるわけではありませんが、たとえあったとしても)
私は、メソッド呼び出しの前に変数としてハッシュを構築できますが、オプションで要素を追加することもできますが、... ick。
これらは人為的な例であり、ヘルパーは:confirm => nil
または:id => nil
を許可しないとし、そのunique_link_id
はIDを残しておきたいとします。私は、Railsの問題を解決するよりもハッシュ構文に興味があります。
誰でも?
link_to "Example 1", "http://www.example.com", :confirm => needs_confirmation? ? "Are you sure?" : nil
と第2ケースのためにあなたが同様に、次の言うことができる:
link_to "Example 2", "http://www.example.com", :id=>unique_link_id
注:unique_link_idは(文字列を返すべき
ありがとうございました。これは、これらの特定の問題を解決しますが、全体的な問題は解決しません。私が探しているものを明確にするために質問を編集しました。 –
あなたはそれを編集したとは思いませんでした。はい、答えの第2部はまさに私が望んでいたものです - {} .mergeは私だけではありません:id => unique_link_id、しかし独自のunique_link_id。完璧。 –