2012-07-18 2 views
4

안녕하세요 여러분,이 문제 (게시물 제목)가 있습니다.경로가 일치하지 않습니다 {: action => "show", : controller => "user", : id => nil}

여기가 내 UserController입니다. 여기

class UserController < ApplicationController 

    def new 
    end 

    def create 
    @user = User.new(params[:user]) 
    @user.save 
    redirect_to :action => :show, :id => @user.id 
    end 

    def show 
    @user = User.find(params[:id]) 
    end 
end 

require 'spec/spec_helper' 

describe UserController do 
    it "create new user" do 
    get :create, :user => { :email => '[email protected]', :name => 'userexample' } 
     flash[:notice] = 'new user was successfully created.' 
    end 
    end 
end 

답변

5
if @user.save 
    redirect_to :action => :show, :id => @user.id 
else 
... 
end 
+0

.save가 실패하여 리디렉션되고 @ user.id의 값이 nil 인 경우에도 더 자세히 설명하면 표시되도록 리디렉션됩니다. – Unixmonkey

+0

에 내가 무엇을 넣어야하는지? – Asantoya

+0

내가 추천 한 내용을 넣었으나 이제이 오류가 발생합니다. 오류/오류 : 가져 오기 : 만들기, : 사용자 => {: 전자 메일 => '[email protected]', : name => 'userexample'} ActionView : : MissingTemplate : {: 처리기 => [: coffee, : haml, : 작성기 : erb], : 로케일 => [: en], : formats => [[: html] }. 검색된 곳 : – Asantoya

1

대부분의 레일 애플 리케이션 레코드를 생성하고 업데이트하는 내용 블록의이 유형을 사용하는 내 RSpec에 테스트 내 routes.rb

::Application.routes.draw do 

    devise_for :users 
    root :to => "user#index" 
    resources :user 
    #match "newuser" => "user#new" 
    get "user/new" 
    post "user/create" 
    get "user/:id" => "user#show" 

입니다 그리고 여기 .

def create 
    @user = User.new(params[:user]) 

    if @user.save 
    redirect_to @user, :notice => "User was created successfully." 
    else 
    render :new 
    end 
end 

는 기본적으로 create 조치가 실행 될 때 새 레코드, 또는 User 모델의 새 인스턴스를 만듭니다.

.save을 호출하면 모든 유효성 검사를 검사합니다. 검증이 성공하면 true를 반환하고 그렇지 않으면 false를 반환합니다.

false를 반환하면 :new 템플릿을 다시 렌더링해야 사용자가 모든 유효성 오류를 수정할 수 있습니다.

true를 반환하면 show 동작으로 리디렉션하고 싶습니다. 레일에 대한 멋진 점은 인스턴스 @user을 전달하여 it can automatically figure that out이라는 것입니다.


라이언 베이츠 testing controllers with RSpec에 대한 자습서를 가지고있다. 그가하는 일에 따라, 이것은 내가 당신의 컨트롤러를 테스트하는 방법입니다.

require 'spec/spec_helper' 

describe UserController do 

    describe "POST 'create'" do 

    it "should redirect to user on successful save" do 
     User.any_instance.stub(:valid?) { true } 
     post :user 
     flash[:notice].should_not be_nil 
     assigns(:user).should_not be_a_new_record 
     response.should redirect_to(assigns(:user)) 
    end 

    it "should render new template on failed save" do 
     User.any_instance.stub(:valid?) { false } 
     post :user 
     flash[:notice].should be_nil 
     assigns(:user).should be_a_new_record 
     response.should render_template(:new) 
    end 

    it "should pass params" do 
     User.any_instance.stub(:valid?) { true } 
     post :user, :user => { email_address: "[email protected]" } 
     assigns(:user).email_address.should == "[email protected]" 
    end 
    end 
end 
관련 문제