2011-04-19 3 views
1

컨트롤러에 대한 테스트를 작성하고 있습니다. 그들은 매우 간단하지만이 오류는 계속 나타납니다. 이것은 내 컨트롤러Mongoid에 대해이 RSpec 오류를 수정하는 방법은 무엇입니까? "심볼을 정수로 변환 할 수 없습니다"

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

내 테스트

before(:each) do 
    @user = Fabricate(:user) 
    sign_in @user 
    end 
    ... 
    it "should be successful" do 
    get "show", :id => @user 
    response.should be_success 
    end 

그리고 오류 메시지입니다

1) UsersController GET 'show' for the logged in user should be successful 
    Failure/Error: get "show", :id => @user 
    TypeError: 
     can't convert Symbol into Integer 
    # ./app/controllers/users_controller.rb:6:in `show' 
    # ./spec/controllers/users_controller_spec.rb:31:in `block (4 levels) in <top (required)>' 

답변

0

컨트롤러의 실수 위치입니다. find 메서드는 자동으로 첫 번째 결과 만 반환합니다 (코드에서 User.where(:id => params[:id]).first과 동일). 첫 번째 심볼을 제거하고 단순히 id를 넘겨 줘야합니다. (User.find(id))

+0

'BSON :: InvalidDocument : User 클래스의 객체를 BSON으로 직렬화 할 수 없습니다.'라는 메시지가 나타납니다. Mongoid를 사용하고 있지만 API는 ActiveRecord와 거의 같습니다. – picardo

+0

사용 : id => @ user.to_param – Roman

0

get "show", :id => @user

여기

귀하의 문제는과 같다, 귀하의 사양 컨텍스트에서 값이 게시 된 예제에서 명확하지 않습니다. params argument to get의 값으로 정수 레코드 ID (예 : :id => 1)를 전달해야합니다.

관련 문제