TheWebs
TheWebs

Reputation: 12933

no route matches - rails 4.0

I have a route set up as such:

  get 'password reset' => 'password_resets#edit', :as => 'password_reset'
  resources :password_resets

I have a controller as such:

class PasswordResetsController < ApplicationController
  def new
  end

  def create
    user = User.find_by_email(params[:email])
    if user
      user.send_password_reset
      redirect_to root_url, :notice => 'Email has been sent. Please follow instructions to reset your password.'
    else
      redirect_to password_resets_path
      flash[:error] = 'Sorry but we do not know that email.'
    end
  end

  def edit
    @user = User.find_by_password_reset_token!(params[:id])
  end
end

I then sent an email off and used letter_opener to view its contents in browser:

No route matches {:controller=>"password_resets", :action=>"edit", :format=>"lYoa1Rh6yfwL2olfwkODnQ"} missing required keys: [:id]

I then did rake routes

    password_resets GET    /password_resets(.:format)          password_resets#index
                    POST   /password_resets(.:format)          password_resets#create
 new_password_reset GET    /password_resets/new(.:format)      password_resets#new
edit_password_reset GET    /password_resets/:id/edit(.:format) password_resets#edit
                    GET    /password_resets/:id(.:format)      password_resets#show
                    PATCH  /password_resets/:id(.:format)      password_resets#update
                    PUT    /password_resets/:id(.:format)      password_resets#update
                    DELETE /password_resets/:id(.:format)      password_resets#destroy

Why am I getting this error? all my mailer tests are passing ... but trying this in browser means that eaither my mailer tests are lying or something is wrong.

If I try doing a link like:

link_to "Some where", edit_password_reset_url(@user.password_reset_token)

The browser works but the tests fail ... with the same error message.

Upvotes: 0

Views: 951

Answers (2)

Ahmed ElBayaa
Ahmed ElBayaa

Reputation: 266

try

link_to "Some where", edit_password_reset_url(id: @user.password_reset_token)

Upvotes: 1

user896237
user896237

Reputation:

If user.password_reset_token = lYoa1Rh6yfwL2olfwkODnQ

You should send ID of this password table to the edit action.

Upvotes: 0

Related Questions