Ruby のシンタックス シュガー (Rails が多用する) に混乱しています。あなたの質問に答える前に、これについて簡単に説明させてください。
ruby 関数がハッシュである単一のパラメーターを取る場合:
def foo(options)
#options is a hash with parameters inside
end
括弧/括弧を「忘れる」ことができ、次のように呼び出すことができます。
foo :param => value, :param2 => value
Ruby は空欄を埋め、あなたが達成しようとしていることは次のとおりであることを理解します。
foo({:param => value, :param2 => value})
さて、あなたの質問に: 2 つのオプションのハッシュlink_to
を取ります - 1 つは呼び出され、もう1 つは. このように定義されていると想像できます (これは概算であり、はるかに複雑です)。options
html_options
def link_to(name, options, html_options)
...
end
さて、このように呼び出すと:
link_to 'Comments', :name => 'Comments'
Ruby は少し混乱します。「空白を埋めよう」としますが、間違っています:
link_to('Comments', {:name => 'Comments'}, {}) # incorrect
part は!name => 'Comments'
ではなく、オプションに属していると見なされます。html_options
自分で空白を埋めて Ruby を助けなければなりません。すべての括弧を配置すると、期待どおりに動作します。
link_to('Comments', {}, {:name => 'Comments'}) # correct
必要に応じて、最後の括弧のセットを実際に削除できます。
link_to("Comments", {}, :name => "comments") # also correct
ただし、html_options を使用するには、最初の括弧のセットを残す必要があります。たとえば、確認メッセージと名前を含むリンクの場合、次のようにする必要があります。
link_to("Comments", {:confirm => 'Sure?'}, :name => "comments")
他の Rails ヘルパーも同様の構造 (つまりform_for
, collection_select
) を持っているので、このテクニックを習得する必要があります。疑わしい場合は、すべての括弧を追加してください。