2011-01-10 12 views
0

私はRailsとMongoDBにはまったくニュースです。私は良い本からのチュートリアルに従っていて、軽いTwitterのコピーで私の最初のRailsアプリケーションを作成しています。すべてがうまく行きました。ORM mangomapperで生成されたRailsコードNoMethodError(未定義のメソッド `each 'for" 4d2aeaea4403baa84a000005 ":String)

しかし、学習プロセスの一環として、デフォルトのSGBDではなくMongoDBを使用して同じアプリを構築したいと考えていました。

したがって、mongoを設定し、mongo_mapper gemをインストールしました。このチュートリアルでは、すべてが正しく設定されています:http://www.mongodb.org/display/DOCS/Rails+3+-+Getting+Started。それから、私はRailsが指定されていないエラーを投げずに動作するように少し苦労しました。これを乗り越えるために、私はレール3ジェネレータの宝石を追加し、それをGemfileに追加しなければなりませんでした。

これがすべて完了したら、すべて正常に機能しました。私はRailsサーバーを正常に起動できました。

私はgenerateのおかげでユーザーコントローラを追加しました。ページが正常に動作しても、私が以前に追加したユーザーが一覧表示されます:

alt text

をしかし、他のすべてのアクション、表示など、削除、編集が作品を作成(作業されていませんが、それは示すことを行きますそして、エラーが)来る:

alt text

それは、事実上すべての異なるアクションに対して同じエラーです。

私はバットからすぐに気づくことができる1つの違いは、非MongoDBデータベースでは、ユーザーのIDが1などから始まっていたことですが、ここではMongoDBではランダムに生成されたIDそれはint型ではありません:4d2ae91d4403baa84a000002

すべてのアクションがidをパラメータとして使用しているので、これは問題を引き起こす可能性があると考えていますが、これを修正する方法はありません。私はRubyで生成されたコードを見てきましたが、それは私にとっては大丈夫です(デフォルトの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

私たちに 'users_controller.rb'の16行目を表示してください。 –

+0

justeが投稿を編集しました。 – Alex

答えて

1

Hummmので、私がPBを見つけたようです。.. 。

は私が交換さ:

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

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

もう一度、このコードが生成されました...どこからエラーが出ますか?レール3発電機に「バグ」はありますか?または何とか私は世代を台無しにした?

アレックス

+0

はい、rails3-generatorのバグです。私は[修正](https://github.com/indirect/rails3-generators/pull/9)を提出しました。 –

+0

Ok sweet。ありがとう! – Alex

関連する問題