2011-01-10 3 views
0

저는 Rails와 MongoDB에 절대적으로 소식입니다. 좋은 책에서 튜토리얼을 따라 가볍게 트위터로 첫 번째 Rails 앱을 만들었습니다. 모든 것이 부드럽고 매끄러 웠습니다.ORM mangomapper로 생성 된 레일즈 코드는 NoMethodError ("4d2aeaea4403baa84a000005"에 대해 정의되지 않은 메소드 : String)를 던졌습니다.

그러나 학습 과정의 일환으로 기본 SGBD보다는 MongoDB를 사용하여 동일한 앱을 제작하고 싶었습니다.

따라서 mongo를 구성하고 mongo_mapper gem을 설치했습니다. 이 튜토리얼에 따라 모든 것이 올바르게 구성되었습니다 : http://www.mongodb.org/display/DOCS/Rails+3+-+Getting+Started. 그런 다음 레일즈가 저를 던지지 않고 작동하도록 생성하기 위해 약간 어려움을 겪었습니다 - 지정되지 않은 오류. 이것을 극복하기 위해 레일즈 3 생성기를 추가하고 그것을 Gemfile에 추가해야했습니다.

이 모든 작업이 완료되면 모든 것이 정상적으로 작동합니다. Rails 서버를 성공적으로 시작할 수있었습니다.

생성자 덕분에 사용자 컨트롤러가 추가되었습니다. 페이지가 잘 작동하고 심지어 내가 이전에 추가 한 사용자를 나열

alt text 그러나 다른 모든 행동을 보여주는, 편집, 등, 삭제 작업을 생성 (작동하지 않는,하지만 그것은 보여 간다 그리고 오류가) 제공 :

alt text

그것은 거의 모든 다른 작업에 대해 동일한 오류입니다.

내가 방망이에서 알아 차릴 수있는 한 가지 차이점은 MongoDB가 아닌 DB를 사용하면 사용자의 ID가 1에서 시작한다는 것입니다.하지만 여기 MongoDB에서는 무작위로 생성 된 ID처럼 훨씬 더 복잡합니다. 그리고 그것은 int 타입이 아닙니다 : 4d2ae91d4403baa84a000002

모든 액션이 id를 매개 변수로 사용하고 있기 때문에 이것이 문제를 일으킬 수 있다고 생각합니다. 그러나 이것을 고치는 방법을 모릅니다. 나는 루비 생성 된 코드를 살펴 봤는데 그것은 나에게 잘 보였다 (디폴트 db를 생성하는 코드와 매우 유사하다).

도움이 될 것입니다. mongodb를 사용하여 간단한 코드를 생성하지 않고 프로젝트를 진행하는 방법을 모르겠습니다.

감사합니다,

알렉스

PS : 내가 모든이 코드 중 하나를 작성하지 않았다하시기 바랍니다. 모든 users_controllers의 코드 여기에 질문으로 나는 ... 갈 수

에서 작동 할 것으로 예상하는 이유 좀 인 생성되었습니다

class UsersController < ApplicationController 
    # GET /users 
    # GET /users.xml 
    def index 
    @users = User.all 

respond_to do |format| 
    format.html # index.html.erb 
    format.xml { render :xml => @users } 
    end 
    end 

    # GET /users/1 
    # GET /users/1.xml 
    def show 
@user = User.first(params[:id]) 

respond_to do |format| 
    format.html # show.html.erb 
    format.xml { render :xml => @user } 
end 
    end 

    # GET /users/new 
    # GET /users/new.xml 
    def new 
@user = User.new 

respond_to do |format| 
    format.html # new.html.erb 
    format.xml { render :xml => @user } 
end 
    end 

# GET /users/1/edit 
    def edit 
@user = User.first(params[:id]) 
    end 

    # POST /users 
    # POST /users.xml 
    def create 
    @user = User.new(params[:user]) 

respond_to do |format| 
    if @user.save 
    format.html { redirect_to(@user, :notice => 'User was successfully created.') } 
    format.xml { render :xml => @user, :status => :created, :location => @user } 
    else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @user.errors, :status => :unprocessable_entity } 
    end 
end 
end 

    # PUT /users/1 
    # PUT /users/1.xml 
    def update 
@user = User.first(params[:id]) 

respond_to do |format| 
    if @user.update(params[:user]) 
    format.html { redirect_to(@user, :notice => 'User was successfully updated.') } 
    format.xml { head :ok } 
    else 
    format.html { render :action => "edit" } 
    format.xml { render :xml => @user.errors, :status => :unprocessable_entity } 
    end 
end 
    end 

    # DELETE /users/1 
    # DELETE /users/1.xml 
    def destroy 
@user = User.first(params[:id]) 
@user.destroy 

respond_to do |format| 
    format.html { redirect_to(users_url) } 
    format.xml { head :ok } 
end 
    end 
end 
+0

우리에게 16 개의'users_controller.rb'를 보여주십시오. –

+0

님이 juste을 수정했습니다. – Alex

답변

1

Hummm 내가 (PB)을 발견 보인다 그래서이 .. .

나는 대체 :

@user = User.first(params[:id]) 

@user = User.find(params[:id]) 
,691에 의해

다시 말하지만,이 코드가 생성되었습니다 ... 오류는 어디에서 발생합니까?레일즈 3 발전기에 "버그"가 있습니까? 또는 어떻게 든 나는 세대를 망쳤다?

알렉스

+0

예, rails3 생성기의 버그입니다. [fix] (https://github.com/indirect/rails3-generators/pull/9)를 제출했습니다. –

+0

알았어. 감사 ! – Alex