0

次のルートがあります:

GET    /confirm/:token(.:format)  Confirmations#confirm

コントローラ:

class ConfirmationsController < ApplicationController
  # GET /confirm/<token>
  def confirm
    @user = User.find_by_email_token(params[:token])
    if @user
      @user.confirmed = true
      @user.email_token = nil
      @user.save!
      sign_in @user
      redirect_to root_url, flash: { success: "Welcome <#{@user.email}>, your address has been verified." }
    elsif
      redirect_to root_url, flash: { error: "Error: could not find matching user record." }
    end
  end
end

そして、これは簡単confirmations_controller_spec.rbです:

require 'spec_helper'

describe ConfirmationsController do

  let(:user) { FactoryGirl.create(:user, email_token: "some_token") }

  describe "Get confirm" do
    it "confirms user with valid email_token" do
      get :confirm, token: "some_token"
      assigns(:user).should eq(user)
      user.reload.email_token.should be_nil
    end

    it "does not confirm user with invalid email_token"
  end
end

しかし、それは失敗します:

  1) ConfirmationsController Get confirm confirms user with valid email_token
     Failure/Error: get :confirm, token: "some_token"
     ActionController::RoutingError:
       No route matches {:token=>"some_token", :controller=>"confirmations", :action=>"confirm"}
     # ./spec/controllers/confirmations_controller_spec.rb:9:in `block (3 levels) in <top (required)>'

私が台無しにしたもの(複数の可能性があります)を見た人はいますか?

ところで-getここでは( ではなくput)リクエストを使用しています。これは、テキストベースの電子メールから開始されているため、私の理解ではputリクエストを使用できないためです...

4

1 に答える 1

1

レーキ ルートでConfirmationsは、大文字を使用しないでください。

次のようにルートを定義できますかconfig/routes.rb:

match '/confirm/:token' => 'confirmations#confirm'
于 2013-01-15T14:14:25.660 に答える