Что у вас в файле маршрутов?
Попробуйте поставить
map.log_out 'logout', :controller => 'sessions', :action => 'destroy'
в ваших маршрутах.
Тогда просто есть
<%= link_to "Sign out", log_out_url %>
для ссылки выхода.
EDIT
Все зависит от того, как вы указали маршрутизацию.
Поскольку в маршрутизации у вас был map.log_out, то URL http://localhost:3000/logout url подобран этим и направляется к правильному действию.
Если у вас есть:
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
Это просто сгенерирует для вас ссылку http://localhost:3000/session. Но это никак не повлияет на маршрутизацию. Вам все еще нужно указать правильные маршруты.
Обратите внимание, что Rails не добавляет действие уничтожения к URL-адресу. (Он не создаст http://localhost:3000/session/destroy.) Предполагается, что если у вас есть действие уничтожения, вы будете отправлять его с глаголом DELETE http. По какой-то причине он не совсем совершенен и фактически не используется по умолчанию на отправку глагола DELETE.
Вы можете заставить его сделать это:
<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%>
Это все равно не будет работать, если вы также не направите его правильно. Если вы добавили следующее в маршруты:
map.resource :session
Затем rails сгенерирует маршрутизацию для всех глаголов и определит действия по умолчанию для них, включая DELETE. Дополнительную информацию можно найти здесь: Маршрутная маршрутизация с внешней стороны .
Вся эта страница стоит читать снова и снова, пока вы ее не поймете. Маршрутизация - это ключ к пониманию Rails!
Для простого контроллера, такого как Sessions, проще просто указать маршрут log_out, а затем ссылку на log_out_url ..
(Надеюсь, что это имеет смысл, лишение сна нарастает!)