2016-08-26 5 views
0

Я недавно пошевелить проект далеко от нескольких наворотов разработать к зазору, хотя я испытываю трудности при попытке выйти изНевозможно выйти из клиренса жемчужины

В настоящее время я получаю ошибку маршрута не существующие

No route matches [GET] "/sign_out" 

маршруты

resources :passwords, controller: "clearance/passwords", only: [:create, :new] 
    resource :session, controller: "clearance/sessions", only: [:create] 

    resources :users, controller: "clearance/users", only: [:create] do 
    resource :password, 
     controller: "clearance/passwords", 
     only: [:create, :edit, :update] 
    end 

    get "/sign_in" => "clearance/sessions#new", as: "sign_in" 
    delete "/sign_out" => "clearance/sessions#destroy", as: "sign_out" 
    get "/sign_up" => "clearance/users#new", as: "sign_up" 

    constraints Clearance::Constraints::SignedIn.new do 
    root :to => 'shopping/merchants#index', as: :signed_in_root 
    end 

    constraints Clearance::Constraints::SignedOut.new do 
    root to: 'clearance/sessions#new' 
    end 

вид

= link_to sign_out_path, method: :delete, class: 'mdl-navigation__link' do 
    i.material-icons> exit_to_app 
    = t('.log_out') 

ответ

0

В сообщении говорится, что нет get маршрут для sign_out, что является правильным. Вы должны сделать delete. Это означает, что, несмотря на ваши усилия с method: :delete, ссылка выполняет запрос get. В вашем link_to что-то не так. Скорее всего, это связано с передачей method при использовании блочной формы link_to.

Try:

<%= button_to "Sign Out", sign_out_path, method: :delete %> 

Если это работает, попробуйте:

<%= link_to "Sign Out", sign_out_path, method: :delete %> 

Если оба из этих работ, то проблема действительно с тем, как вы используете блок формы link_to хелпер и не имеет ничего общего с оформлением.

+0

Привет, @derek У вас есть решение, которое разрешит этот вопрос –

+0

@ Paul'Whippet McGuane: обновлено с некоторыми вещами, чтобы попробовать. –

0

Мне показалось, что я буду следить за этим с немного более глубоким пониманием того, кто оказался здесь, все еще задаваясь вопросом, что именно стоит за этим.

Как предложил Дерек, чтобы получить эту отсортирован, вы должны будете использовать button_to вместо link_to следующим образом:

<%= button_to "Sign Out", sign_out_path, method: :delete %> 

Почему я не могу просто использовать link_to?

Значительно больше информации об этом доставляются by this previous SO. По существу, вы не можете заставить ссылку работать как метод DELETE, только GET.

Если вы посмотрите на то, как link_to фактически оказывается в HTML на странице (после того, как Рубин работает его магия), вы увидите следующее:

<a rel="nofollow" data-method="delete" href="/sign_out">Sign out</a> 

И это понятно, что data-method="delete" все еще не собирается разрезать его и все еще выполняет запрос как GET.

Но я не хочу кнопку, я хочу ссылку?

Лучше всего посмотреть на некоторый CSS на элементе, чтобы вернуть его к ссылке, иначе вам нужно будет перейти по маршруту Javascript.

НЕДВИЖИМОСТЬ НЕЗАВИСИМЫХ РАЗРЕШЕНИЙ Centric Dirty Hack - не рекомендуется!

Использование link_to, изменить ваш routes.rb где маршрут Зазор в настоящее время говорит:

delete  "/sign_out" => "clearance/sessions#destroy", as: "sign_out" 

к:

get  "/sign_out" => "clearance/sessions#destroy", as: "sign_out" 

Это будет маршрутизировать GET запрос на destroy действия на контроллере Clerance. Я смею сказать, что это не рекомендуется, и Дерек мог бы поддержать, почему это не было поддержано в первую очередь (Devise gem действительно поддерживает этот грязный хак)

 Смежные вопросы

  • Нет связанных вопросов^_^