2011-01-10 11 views
0

Ich bin absolut neu bei Rails und MongoDB. Ich habe Tutorials aus einem guten Buch gelesen und meine erste Rails-App mit einer leichten Twitter-Kopie erstellt. Alles lief gut und glatt.Rails-Code generiert mit ORM Mangomapper wirft NoMethodError (undefinierte Methode `each 'für" 4d2aeaea4403baa84a000005 ": String)

Aber als Teil meines Lernprozesses wollte ich die gleiche App mit MongoDB anstatt der Standard-SGBD erstellen.

Ich habe daher Mongo konfiguriert und den mongo_mapper gem installiert. Nach diesem Tutorial wurde alles richtig konfiguriert: http://www.mongodb.org/display/DOCS/Rails+3+-+Getting+Started. Dann habe ich ein wenig gekämpft, damit Rails generiere funktioniert, ohne mir den --orm nicht spezifizierten Fehler zuzuschieben. Um das zu überstehen, musste ich den rails3-generators gem hinzufügen und den Gemfile hinzufügen.

Sobald all dies getan wurde, hat alles gut funktioniert. Ich konnte den Rails-Server erfolgreich starten.

Ich habe einen Benutzer-Controller dank der Generierung hinzugefügt. Die Seite funktioniert gut und listet auch die Benutzer ich zuvor hinzugefügt haben:

alt text

jedoch alle anderen Aktionen, Anzeigen, Bearbeiten, Löschen usw. nicht funktionieren (Werke zu schaffen, aber dann geht es zu zeigen, und die Fehler kommt):

alt text

Es ist praktisch der gleiche Fehler für alle verschiedenen Aktionen. Der einzige Unterschied, den ich sofort feststellen kann, ist, dass mit der Nicht-MongoDB-Datenbank die IDs des Benutzers bei 1 beginnen, aber hier bei MongoDB sieht es aus wie eine zufällig generierte ID, die viel komplexer ist und das ist nicht vom Typ int: 4d2ae91d4403baa84a000002

Ich denke, dass dies die Probleme erstellen kann, da alle Aktion die ID als Parameter verwenden ... aber ich habe keine Ahnung, wie das zu beheben. Ich habe mir den Ruby-generierten Code angeschaut und er sieht in Ordnung aus (extrem ähnlich dem Code, der für die Standard-DB generiert wird).

Jede Hilfe würde sehr geschätzt werden! Ich weiß nicht, wie ich mit meinem Projekt weitermachen soll, ohne einen einfachen Generierungscode mit mongodb zu lösen.

Danke,

Alex

ps: bitte, dass ich überhaupt eine dieser Code nicht schreiben. alles erzeugt worden ist, was irgendwie ist, warum ich von der an die Arbeit gehen zu erwarten ...

wie hier gefragt ist der Code für 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

Zeigen Sie uns Zeile 16 von 'users_controller.rb' bitte. –

+0

juste hat den Post bearbeitet. – Alex

Antwort

1

Hummm so scheint es, ich pb gefunden .. .

I ersetzt:

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

von

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

Aber wieder wurde dieser Code generiert ... woher kommt der Fehler?Gibt es einen "Bug" in Rails3-Generatoren? Oder irgendwie habe ich die Generation vermasselt?

Alex

+0

Ja, es ist ein Fehler in Rails3-Generatoren. Ich habe den [fix] (https://github.com/indirect/rails3-generators/pull/9) eingereicht. –

+0

Ok süß. Vielen Dank ! – Alex