Монгоидные отношения обратного вызова не работают должным образом - PullRequest
2 голосов
/ 16 июля 2011

Итак, у меня есть наблюдатель, который выглядит так:

class RecipeObserver < Mongoid::Observer

  def after_create(object)
    puts object.user
    puts "test"
  end

end

Итак, у меня все работает нормально, но отношения object.user равны нулю, как будто мой класс Recipe belongs_to user, который также has_many recipe. Что я тут не так делаю?


Обновление

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

class RecipesController < ApplicationController
  respond_to :html
  before_filter :authenticate_user!, :only => :new

  # ... other actions

  def new
    @recipe = Recipe.new
    respond_with @recipe
  end

  def create
    @recipe = Recipe.new(params[:recipe])
    @recipe.save

    respond_with @recipe, :notice => "You've created a recipe!"
  end
end

Мои модели (для краткости усечены):

class Recipe
  include Mongoid::Document

  # ... other methods and such

  belongs_to :user
end

class User
  include Mongoid::Document

  field :name

  # ... other methods and such

  has_many :recipes
end

Итак, большая проблема в том, что вызов object.user в методе after_create равен нулю, но он даже не выдает исключение, просто приводит к тому, что ничего не возвращается, что я считаю самым странным, я не действительно уверен в том, как начать отладку этого.

1 Ответ

1 голос
/ 17 июля 2011

Не похоже, что вы фактически назначаете пользователя рецепту в любом месте.Попробуйте:

def create
  @recipe = current_user.recipes.build(params[:recipe])
  @recipe.save

  respond_with @recipe, :notice => "You've created a recipe!"
end
...