Ответ 1
Там нет функциональной разницы между использованием to
VS =>
определить маршрут в Rails. Внутри методы маршрутизации фактически преобразуют аргументы маршрута формы
<method> '<path>' => '<controller>#<action>'
к этой форме
<method> '<path>', to: '<controller>#<action>'
Исходный код
Вот фактический источник, который выполняет преобразование (из Rails 4.0.4), в ActionDispatch::Routing::Mapper::Resources
. Обратите внимание, что каждый из методов маршрутизации get
, post
и т.д. В конечном итоге передает свои аргументы через этот метод match
(комментарии мои):
def match(path, *rest)
# This if-block converts '=>' to 'to'.
if rest.empty? && Hash === path
options = path
# The 'find' method will find the first hash key that is a string
# instead of a symbol, e.g. ''welcome/index' => 'welcome#index'' instead
# of 'to: 'welcome#index''. By parallel assignment, 'path' then becomes
# the value of the key, and 'to' is assigned the value
# (the controller#action).
path, to = options.find { |name, _value| name.is_a?(String) }
# The following two lines finish the conversion of '=>' to 'to' by adding
# 'to' to the options hash, while removing the
# ''welcome/index' => 'welcome#index'' key/value pair from it
options[:to] = to
options.delete(path)
paths = [path]
else
options = rest.pop || {}
paths = [path] + rest
end
# More Code...
end