Подтвердить что ты не робот

Ruby on Rails - создайте пользователей /sign _out без работы.

Я использую devise sign_in и sign_up работают URL

а, когда я пробую URL: http://localhost:3000/users/sign_out

он генерирует ошибку маршрутизации

No route matches [GET] "/users/sign_out"

Как я могу это исправить?

маршруты рейка

rake routes
        new_user_session GET    /users/sign_in(.:format)           {:action=>"new", :controller=>"devise/sessions"}
            user_session POST   /users/sign_in(.:format)           {:action=>"create", :controller=>"devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)          {:action=>"destroy", :controller=>"devise/sessions"}
           user_password POST   /users/password(.:format)          {:action=>"create", :controller=>"devise/passwords"}
       new_user_password GET    /users/password/new(.:format)      {:action=>"new", :controller=>"devise/passwords"}
      edit_user_password GET    /users/password/edit(.:format)     {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)          {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET    /users/cancel(.:format)            {:action=>"cancel", :controller=>"devise/registrations"}
       user_registration POST   /users(.:format)                   {:action=>"create", :controller=>"devise/registrations"}
   new_user_registration GET    /users/sign_up(.:format)           {:action=>"new", :controller=>"devise/registrations"}
  edit_user_registration GET    /users/edit(.:format)              {:action=>"edit", :controller=>"devise/registrations"}
                         PUT    /users(.:format)                   {:action=>"update", :controller=>"devise/registrations"}
                         DELETE /users(.:format)                   {:action=>"destroy", :controller=>"devise/registrations"}
    status_message_index GET    /status_message(.:format)          {:action=>"index", :controller=>"status_message"}
                         POST   /status_message(.:format)          {:action=>"create", :controller=>"status_message"}
      new_status_message GET    /status_message/new(.:format)      {:action=>"new", :controller=>"status_message"}
     edit_status_message GET    /status_message/:id/edit(.:format) {:action=>"edit", :controller=>"status_message"}
          status_message GET    /status_message/:id(.:format)      {:action=>"show", :controller=>"status_message"}
                         PUT    /status_message/:id(.:format)      {:action=>"update", :controller=>"status_message"}
                         DELETE /status_message/:id(.:format)      {:action=>"destroy", :controller=>"status_message"}
                    home        /home(.:format)                    {:action=>"index", :controller=>"status_message"}
                    root        /                                  {:controller=>"home", :action=>"index"}

routes.rb

Microblog::Application.routes.draw do
  devise_for :users, :controllers => {:migrations => "users/registrations"}
  resources 'status_message'
  match 'home' => 'status_message#index'
  root :to => 'home#index'
end
4b9b3361

Ответ 1

Причиной ошибки является то, что маршрут недоступен с использованием метода GET HTTP. Обратите внимание на то, как выглядит соответствующая строка на вашем выходе rake routes:

destroy_user_session DELETE /users/sign_out(.:format)

Это означает, что если вы хотите зарегистрировать пользователя, вам необходимо отправить запрос DELETE на этот URL-адрес. В рельсах вы можете создать ссылку, которая делает это так:

link_to 'Sign out', destroy_user_session_path, :method => :delete

# alternatively (although NOT recommended):

link_to 'Sign out', '/users/sign_out', :method => :delete

Важная часть :method => :delete. Обратите внимание, что запрос DELETE на самом деле не поддерживается браузерами, rails фактически выполняет POSTing данных, но он отправляет специальный параметр, который имитирует метод DELETE.

Причина этого в том, что URL-адрес "выходить" - это тот, который выведет текущий пользователь, разрушительное действие. Если он был свободно доступен через браузер, это может вызвать различные проблемы. Запросы GET никогда не должны изменять состояние сервера. Для получения дополнительной информации об этом, здесь хорошая статья в википедии: http://en.wikipedia.org/wiki/REST#RESTful_web_services

Ответ 2

Любое из приведенных выше предложений не сработало для меня....

Этот пост может быть более полезным для поиска других альтернатив. Нет совпадений маршрутов "/users/sign_out" изобретать рельсы 3

Мне пришлось добавить следующие строки в файл application.js

//= require_tree .
// Add following lines.
//= require jquery 
//= require jquery_ujs

Ответ 3

У меня были точно такие же симптомы, но я также использовал jquery-turbolinks с кладкой-рельсами, чтобы иметь изображения при переходе сайта и позиционировании "красиво".

Я обнаружил, что это "сломало" переходы:

//= require jquery_ujs

поэтому я удалил его, и переходы работали как чудо... но когда я вышел из системы, я получил вышеуказанную ошибку, хотя мои рейковые маршруты показывали существование пути.

"Исправление" для меня оказалось добавлением //= require rails-ujs и некоторой перестройкой моего дерева, поэтому я закончил с:

//= require rails-ujs
//= require jquery
//= require jquery.turbolinks
//= require twitter/bootstrap
//= require masonry/jquery.masonry
//= require masonry/jquery.imagesloaded.min
//= require masonry/modernizr-transitions
//= require turbolinks
//= require_tree .

Кроме того, любой, кто обнаружил эту ошибку во время работы в каменной кладке, должен также добавить в раздел div "clearfix с бесконечной прокруткой с помощью переходов" с идентификатором ресурса, над которым он хочет работать... в моем случае "bookads "

<div class="transitions-enabled" id="bookads">
  <% @books.each do |book| %>
    <div class="box panel panel-default">
      <div class="panel-heading index">
        <h3 class="panel-title text-center">
          <strong><%= book.title %></strong>
        </h3>
      </div>
     <div class="panel-body">... etc

Обратите внимание, что идентификатор отдельных элементов, которые я использовал, называется "коробка"

В вашем кофейном тексте:

$ ->
  $('#bookads').imagesLoaded ->
    $('#bookads').masonry
      itemSelector: '.box'
      isFitWidth: true
      isAnimated: true

и чтобы получить "плавную" анимацию, я также добавил masonry/jquery.imagesloaded.min и masonry/modernizr-переходы, как показано в дереве выше.

Надеюсь, этот ответ сэкономит кому-то несколько часов, которые я потратил на поиски решения.

Ответ 4

Поместите это в app/views/layouts/application.html.erb

<%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

Я надеюсь, что это поможет вам