我一直在尝试使用带有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数组。什么是正确的控制器逻辑?
答案 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
。