Код Rails, сгенерированный с помощью ORM mangomapper, генерирует NoMethodError (неопределенный метод `each 'для" 4d2aeaea4403baa84a000005 ": String) - PullRequest
0 голосов
/ 10 января 2011

Я абсолютно новость для Rails и MongoDB. Я изучал учебники из хорошей книги и создал свое первое приложение на Rails с легкой копией Twitter. Все прошло хорошо и гладко.

Но как часть моего учебного процесса я хотел создать то же приложение, используя MongoDB, а не SGBD по умолчанию.

Поэтому я настроил mongo и установил гем mongo_mapper. Все было настроено правильно, следуя этому руководству: http://www.mongodb.org/display/DOCS/Rails+3+-+Getting+Started. Затем я немного постарался, чтобы Rails сгенерировал работу, не выдавая мне ошибку --orm not selected. Чтобы обойти это, мне пришлось добавить гем rails3-generators и добавить его в Gemfile.

Как только все это было сделано, все работало нормально. Мне удалось успешно запустить сервер Rails.

Я добавил пользовательский контроллер благодаря генерации. Страница отлично работает и даже перечисляет пользователей, которых я ранее добавил:

alt text

Однако все остальные действия, показ, редактирование, удаление и т. Д. Не работают (создание работ, но затем оно показывается и появляются ошибки):

alt text

Это практически одна и та же ошибка для всех различных действий.

Единственное отличие, которое я могу сразу заметить, заключается в том, что с не MongoDB db идентификаторы пользователя начинаются с 1 и т. Д., Но здесь с MongoDB это выглядит как случайно сгенерированный идентификатор, который намного сложнее и это не тип int: 4d2ae91d4403baa84a000002

Я думаю, что это может создавать проблемы, поскольку все действия используют id в качестве параметра ... но я не знаю, как это исправить. Я посмотрел на код, сгенерированный ruby, и он мне подходит (очень похоже на код, сгенерированный для базы данных по умолчанию).

Любая помощь будет принята с благодарностью! Я не знаю, как продвинуться в своем проекте, не решив простой генерирующий код с помощью mongodb.

Спасибо

Alex

пс: пожалуйста, чтобы я вообще не писал этот код. все было сгенерировано, поэтому я ожидал, что с самого начала буду работать ...

как указано здесь, код для 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

1 Ответ

1 голос
/ 10 января 2011

Хммм, так что, кажется, я нашел ПБ ...

Я заменил:

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

по

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

Но опять же, этот код был сгенерирован ... так откуда же появилась ошибка? Есть ли "ошибка" в rails3-генераторах? Или я как-то облажался с поколением?

Alex

...