对于 Rails 和 MongoDB,我绝对是新闻。我一直在学习一本好书的教程,并用一个轻量级的 Twitter 副本创建了我的第一个 Rails 应用程序。一切都很顺利。
但作为我学习过程的一部分,我想使用 MongoDB 而不是默认的 SGBD 构建相同的应用程序。
因此,我配置了 mongo 并安装了 mongo_mapper gem。一切都按照本教程正确配置:http ://www.mongodb.org/display/DOCS/Rails+3+-+Getting+Started 。然后我努力让 Rails generate 能够正常工作,而不会向我抛出 --orm not specified 错误。为了解决这个问题,我必须添加 rails3-generators gem 并将其添加到 Gemfile。
完成所有这些后,一切正常。我能够成功启动 Rails 服务器。
由于生成,我添加了一个用户控制器。该页面运行良好,甚至列出了我之前添加的用户:
但是,所有其他操作,显示、编辑、删除等都不起作用(创建作品,但随后显示并出现错误):
对于所有不同的操作,这实际上是相同的错误。
我可以立即注意到的一个区别是,对于非 MongoDB 数据库,用户的 id 从 1 开始,等等。但是在 MongoDB 中,它看起来像一个随机生成的 id,它要复杂得多,但事实并非如此int 类型:4d2ae91d4403baa84a000002
我认为这可能会造成问题,因为所有操作都使用 id 作为参数......但我不知道如何解决这个问题。我查看了 ruby 生成的代码,它看起来不错(与为默认数据库生成的代码非常相似)。
任何帮助将不胜感激 !如果不使用 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