Ошибка маршрутизации с альтернативным методом обновления в ruby ​​на рельсах - PullRequest
0 голосов
/ 13 января 2012

Ruby on rails 3.1.3

Я пытаюсь найти правильный путь к методу change_password моего users_controller.

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

Routing Error

No route matches {:action=>"change_password", :controller=>"users", :format=>#<User id: 1, email: "foo@bar.baz", encrypted_password: "$2a$10$lgmrRTYFUUrWStLl1Y.Oo.LqQ2Ybxa29YkDFw61/KG9O...", password_salt: "$2a$10$lgmrRTYFUUrWStLl1Y.Oo.", username: "foobar", created_at: "2012-01-07 23:02:29", updated_at: "2012-01-13 11:16:45", password_reset_token: nil, password_reset_sent_at: "2012-01-08 12:23:30">}

В users_controller:

def change_password
      @user = current_user
      @user_password_matches = User.authenticate(@user.email, params[:current_password])
      if @user_password_matches.update_attributes(params[:user])
        login @user
        format.js   { render :js => "window.location = '#{settings_account_path}'" } 
        flash[:success] = "Password updated" 
      else
        format.js   { render :form_errors }

      end
    end

Вид изнутри:

<%= form_for @user, :remote => true, :url => change_password_path(@user) do |f| %>
Current password: <%= password_field_tag :current_password, :placeholder => "Password"  %><br />
New password: <%= f.password_field :password, :placeholder => "Password"  %><br />
Confirm password: <%= f.password_field :password_confirmation, :placeholder => "Confirm Password"  %><br />
<%= f.submit 'update' %>

маршруты:

resources :users do
  member do
    put :change_password
  end
end
  resources :users
  resources :sessions
  resources :passwords
  resources :profiles


  root :to                   => "users#new"
  match 'success'            => "users#success"
  match 'login'              => "sessions#new"
  match 'logout'             => "sessions#destroy"
  match 'reset_password'     => "passwords#new"
  match 'setup_new_password' => "passwords#edit"
  match 'settings', :to      => "users#settings"


  match "/settings/account", :to => "users#account"
  match "/settings/edit_profile", :to => "profiles#edit_profile"


  match '/:username', :controller => 'users', :action => 'show'

Все, что я собираюсь сделать, - это обновить атрибуты в БД только в том случае, если введенный пользователем пароль (: current_password) успешно пройдет проверку подлинности (тот же метод, который я использую для входа пользователей, который подтвердит, что пароль совпадает схранится в БД), и если он принимает форму параметров пользователя, в этом случае новый хешированный пароль и сохраните его в БД.

С уважением

1 Ответ

2 голосов
/ 13 января 2012

В вашей форме указан неверный путь, это change_password_user_path, а не change_password_path.

Используйте rake routes, чтобы увидеть названия ваших маршрутов. Кроме того, вам не нужен собственный маршрут для этого, проверьте мой ответ на предыдущий вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...