Answers :: Errors :: MixedRelations in AnswersController #create

时间:2015-06-04 12:04:03

标签: ruby-on-rails ruby ruby-on-rails-4 mongoid

保存答案时获取以下错误信息:

问题:由于嵌入了答案,因此不允许通过关系关联从用户文档引用(n)答案文档。简介:为了正确访问(n)来自用户的答案,引用需要通过Answer的根文档。在一个简单的例子中,这将要求Mongoid为根存储额外的外键,在更复杂的情况下,Answer是多级深度,需要为层次结构中的每个父级存储一个密钥。解决方案:考虑不嵌入Answer,或者在应用程序代码中以自定义方式执行密钥存储和访问。

以上错误是由AnswersController中的代码 @ answer.user = current_user 引起的。

我想将登录用户名保存到有问题的答案中。

deivse用户模型:

class User
  include Mongoid::Document
  has_many :questions
  has_many :answers
class Question

  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Slug

  field :title, type: String
  slug :title

  field :description, type: String
  field :starred, type: Boolean

  validates :title, :presence => true, :length => { :minimum => 20, :allow_blank => false }

  embeds_many :comments
  embeds_many :answers

  #validates_presence_of :comments

  belongs_to :user

end
class Answer

  include Mongoid::Document
  include Mongoid::Timestamps

  field :content, type: String

  validates :content, :presence => true,  :allow_blank => false

  embedded_in :question, :inverse_of => :answers

  #validates_presence_of :comments

  belongs_to :user

end
class AnswersController < ApplicationController

  def create
    @question = Question.find(params[:question_id])
    @answer = @question.answers.create(params[:answer].permit(:answerer, :content))
    @answer.user = current_user
    redirect_to @question, :notice => "Answer added!"
  end
end

使用Rails 4,Ruby 2.2.2,Mongoid。

1 个答案:

答案 0 :(得分:1)

这正是错误信息所说的内容。

您的答案模型嵌入在问题模型中。也就是说,你只能执行&#34; normal&#34;对问题文档进行查询,而不是对这个模型中嵌入的模型进行查询(实际上你可以,但它更难以用某种方式杀死使用嵌入式文档)。

因此,您可以获得给定答案的用户,但不能获得您在用户模型中声明的逆序。

最简单的解决方案是从用户模型中删除has_many :answers,但如果要检索给定用户的答案列表,则嵌入模型可能不是最佳解决方案:您应该拥有关系模型。

为清楚起见,您应该写belongs_to :user, inverse_of: nil