Вопрос

Я установил RESTFUL authentication, и, кажется, все работает нормально.я могу зарегистрироваться и войти в систему.единственный способ, которым я могу выйти из системы, - это ввести URL-адрес http://localhost:3000/logout

как мне добавить кнопку выхода из системы на страницу?я попытался добавить его в members.rhtml

<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>

который ссылается на session_controller.rb но я получаю сообщение об ошибке "На show не отреагировало действие.Действия:создавать, разрушать и создавать новое"

есть какие-нибудь мысли?спасибо

Это было полезно?

Решение

Что у вас в файле маршрутов?

Попробуйте положить

map.log_out 'logout', :controller => 'sessions', :action => 'destroy'

в ваших маршрутах.

Тогда просто есть

<%= link_to "Sign out", log_out_url %>

для выписания ссылки.

РЕДАКТИРОВАТЬ

Все это до того, как вы указываете маршрутизацию.

Потому что у вас была карта .log_out в маршрутизации, то URL http: // localhost: 3000 / Выход URL привлек это и направляется на правильное действие.

Если у тебя есть :

<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>

Это просто принесет ссылку для вас http: // localhost: 3000 / сеанс. Отказ Но это не делает ничего для маршрутизации. Вам все еще нужно указать правильные маршруты.

Обратите внимание, что рельсы не добавляют к URL-адреса. (Это не будет создавать http: // localhost: 3000 / сессия / уничтожить.) Предполагается, что если у вас есть действие уничтожения, что вы будете отправлять его с помощью HTTP-глагола удаления. По какой-то причине его не совсем идеально, и он действительно не также по умолчанию отправка глагола удаления.

Вы можете заставить его сделать это:

<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%>

Это все равно не будет работать, если вы также не направите его правильно. Если вы поместите следующее в маршруты:

map.resource :session

Затем Rails создаст маршрутизацию для всех глаголов и указывает для них действия по умолчанию для них, включая удаление. Более подробную информацию можно найти здесь : Рельсы маршрутизация снаружи в.

Эта целая страница стоит читать и снова, пока вы действительно не поймете. Маршрутизация является ключом к пониманию рельсов!

Для простого контроллера, подобных сеансам, проще просто указать маршрут log_out, а затем ссылаться на log_out_url ..

(Надеюсь, что имеет смысл, лишение сна ползет!)

Другие советы

Если вы используете придумать и вашей заинтересованной моделью является Пользователь, элегантный способ находится здесь:

<%= link_to 'logout', destroy_user_session_path, method: :delete %>

Это работает, потому что:

  • из-за HTTP-методов GET, POST, PUT, PATCH и DELETE, поэтому использование method: :delete (не method: :destroy)
  • мы используем destroy_user_session_path с придумать и Пользователь модель как обычно, если вы определяете другое название модели, например Менеджер вы просто меняете путь выхода из системы на destroy_manager_session_path
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top