2015-10-03 4 views
1

Я пытаюсь исправить проблемы с изменением деталей пользователя Devise в проекте Rails 4. На основании this вопросаОшибка маршрутизации при попытке обновить детали пользователя Devise, Rails 4

Layout:

<div class="modal fade" id="user-profile" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
      <div class="modal-dialog log-modal"> 
       <div class="modal-content"> 

         <%= render partial: "shared/profile" %> 
       </div> 
      </div> 
</div> 

_profile частично.

<%= form_for(@user, :url => { :action => "update_password",:controller =>"users" } ,remote: true, format: :json) do |f| %> 


    <div class="form-group"> 
     <%= f.text_field :name,:class=>"user-input form-control", :id=>"user-name" ,:placeholder=> "Lietotājvārds*",:"data-parsley-group"=>"f1" %>    
    </div> 

    <div class="form-group">  
     <%= f.email_field :email ,:class=>"user-input form-control", :id=>"password",:placeholder=> "E-pasts *",:"data-parsley-group"=>"f2" %>        
    </div> 

    <div class="form-group">     
     <%= f.password_field :current_password, :autocomplete => "off" ,:class=>"user-input form-control", :id=>"password",:placeholder=> "Vecā parole*      ",:"data-parsley-group"=>"f3" %> 
    </div> 

    <div class="form-group">      
     <%= f.password_field :password , :class=>"user-input form-control", :id=>"password",:placeholder=> "Jaunā parole*      vismaz 8 simboli ", :"data-parsley-group"=>"f3" %> 
    </div> 

    <div class="form-group">       
     <%= f.password_field :password_confirmation , :class=>"user-input form-control", :id=>"password",:placeholder=> "Atkārtot paroli *      vismaz 8 simboli ", :"data-parsley-group"=>"f3" %>  
    </div> 

    <button type="submit" class="blue-button btn btn-default">Apstiprināt</button> 
<%end%> 

Мои маршруты Файл:

Rails.application.routes.draw do 

    get 'banned/index' 

    get 'reusable/login' 

    get 'reusable/registration' 
    get 'reusable/password_recovery' 
    resources :menus 

    resources :blocked do 
     collection do 
      get 'checktoken' 
      get 'checkemail'   
     end 

     member do 
      post 'toggle' 
      post 'rev' 
     end 
     end 

ActiveAdmin.routes(self) 

    scope "(:locale)", :locale => /lv|ee|ru/ do   

     devise_for :users, :controllers => {:registrations=> "registrations"} 

     resource :user, only: [:edit] do 
      collection do 
      patch 'update_password' 
      end 
     end 


     resources "successful-registration", :controller => :successful_registration, :as => :successful_registration 


      resources :replies do 
       member do 
       put "like", to: "replies#upvote" 
       put "dislike", to: "replies#downvote" 
       end 
      end 
      resources :reviews do 
       member do 
       put "like", to: "reviews#upvote" 
       put "dislike", to: "reviews#downvote" 
       put "downwote", to: "reviews#complaints" 
       end 
      end 

      resources :reports 
      resources :offers 
      resources :messages 
      resources :feedbacks 

      resources :girls do 
       collection do 
        get 'checktoken' 
        get 'checkemail' 

       end 
       member do 
        put "like", to: "girls#upvote" 
        put "dislike", to: "girls#downvote" 
       post 'toggle' 
       end 
     end 

     get 'sms/receive/', to: 'sms#receive'      
     root 'girls#index' 

     end 

end 

Файл журнала:

Started POST "/ru/user/update_password" for 212.93.100.35 at 2015-10-03 14:08:12 +0300 

ActionController::RoutingError (No route matches [POST] "/ru/user/update_password"): 
    actionpack (4.1.6) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call' 
    actionpack (4.1.6) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 
    railties (4.1.6) lib/rails/rack/logger.rb:38:in `call_app' 

Что я пробовал:

1) Restarted сервер 2) Пробовал менять порядок маршрутов пользователя.

У меня нет других идей, чтобы попробовать. Любая помощь ? Спасибо заранее.

ответ

2

Кажется, у вас есть маршрутизация для запроса PATCH (patch 'update_password'), но вы отправляете запрос POST.

Редактировать файл маршрутизации (post 'update_password') или использовать запрос PATCH:

<%= form_for(@user, :url => { :action => "update_password",:controller =>"users",method: "patch" },remote: true, format: :json) do |f| %> 
1

В дополнение к ответу, вы также должны рассматривать how Devise would provide you с пользователем функциональных изменений учетной записи:

# # Password routes for Recoverable, if User model has :recoverable configured 
#  new_user_password GET /users/password/new(.:format)  {controller:"devise/passwords", action:"new"} 
#  edit_user_password GET /users/password/edit(.:format) {controller:"devise/passwords", action:"edit"} 
#   user_password PUT /users/password(.:format)   {controller:"devise/passwords", action:"update"} 
#      POST /users/password(.:format)   {controller:"devise/passwords", action:"create"} 

Если вы используете rake routes, вы увидите, к какому Devise маршрутам у вас есть доступ, и которые вы можете использовать.

Если вы хотите использовать Devise, чтобы справиться с этим (который появляется у вас есть), вы можете использовать вышеуказанные маршруты (которые станут доступными, если вы добавите :recoverable к вашей User модели Devise определения), или если вы позвоните им напрямую.

Если вы хотите добавить/редактировать Devise маршрутов в явном виде, вы будете в состоянии сделать следующее:

devise_for :users, controllers: { registrations: "registrations" } do 
    patch "passwords/update" => "passwords#update", :as => :password_update 
end 

-

Я также вижу много ваших маршруты, в частности, определены. Хотя в этом нет ничего плохого, это очень неэффективно и фактически препятствует тому, чтобы ваше приложение могло использовать свой истинный потенциал.

Вот некоторые примеры, которые я бы порекомендовал вам исследовать:

#config/routes.rb 
resources :reusable, only: [] do 
    collection do 
     get :login 
     get :registration 
     get :password_recovery 
    end 
end 

Еще один является define multiple resources in one batch ...

resources :reports, :offers, :messages, :feedbacks 
+0

Спасибо за эти советы. Я бы определенно их попробовал. – Edgars

+1

Нет проблем, всегда лучше, чтобы ваше приложение работало плавно, чем чтобы оно работало медленно –

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