你正在用Ruby的語法糖混淆(這Rails的大汗使用)。在回答你的問題之前,讓我簡單解釋一下。
當紅寶石函數有一個參數,它是一個哈希:
def foo(options)
#options is a hash with parameters inside
end
你可以「忘記」把括號/括號,並調用它像這樣:
foo :param => value, :param2 => value
紅寶石將填補空白,並明白,你試圖完成的是這樣的:
foo({:param => value, :param2 => value})
現在,對你的問題:link_to
需要兩個可選哈希 - 一個被稱爲options
和另一個html_options
。你可以把它想象這樣的定義(這是一個近似值,它要複雜得多)
def link_to(name, options, html_options)
...
end
現在,如果你調用這樣說:
link_to 'Comments', :name => 'Comments'
紅寶石將得到一個有點困惑。它會嘗試「填寫空白」爲你,但不正確:
link_to('Comments', {:name => 'Comments'}, {}) # incorrect
它會認爲name => 'Comments'
部分屬於選項,而不是html_options
!
你必須自己填補空白來幫助紅寶石。把所有的括號的地方,它會像預期的那樣:
link_to('Comments', {}, {:name => 'Comments'}) # correct
,如果你想,你可以實際刪除最後一組括號:
link_to("Comments", {}, :name => "comments") # also correct
爲了使用html_options,你必須離開但是第一組括號。例如,您將需要與確認消息和名稱的鏈接做到這一點:
link_to("Comments", {:confirm => 'Sure?'}, :name => "comments")
其他軌道助手具有類似的結構(即form_for
,collection_select
),所以你應該學習這種技術。如有疑問,只需添加所有括號。
對不起,我不認識你* *清楚寫的東西!我的錯!很高興你得到了你需要的答案。我刪除了我的,所以不要混淆任何人:) – 2010-01-19 15:52:19