在mongoid中的referenced_in和references_many的控制器逻辑

时间:2011-02-27 11:27:41

标签: ruby-on-rails ruby-on-rails-3 mongodb mongoid

我一直在尝试使用带有referenced_in和references_many关联的mongoid。我有两个模型,用户和问题。一个问题可以有一个作者,但用户可以是多个问题的作者。下面的代码片段显示了模型的结构。

class User
  include Mongoid::Document
  references_many :questions, :inverse_of => :poster, :dependent => :delete
end 

class Question
  include Mongoid::Document
  referenced_in :poster, :class_name => "User"
end

现在,我的QuestionController#new如下

def create
  @question = Question.new(params[:question])
  @question.poster = current_user

  if @question.save
    current_user.questions <<= @question
    current_user.update_attributes(:questions => current_user.questions)
  end
end

正确填充了question.poster字段,但未填充user.questions数组。什么是正确的控制器逻辑?

2 个答案:

答案 0 :(得分:0)

你的模特看起来不错。但是,您不需要在控制器中完成所有工作。看起来应该是这样的:

def create
  @question = current_user.questions.build(params[:question])

  if @question.save
    #redirect logic goes here
  end
end

您无需将问题明确地添加到用户的问题数组中。

答案 1 :(得分:0)

您是否尝试过以下方式

def create
  @question = Question.new(params[:question])

  if @question.valid?
    current_user.questions << @question

  end
end
mongoid会覆盖

<<,同时会同时保存current_user@question