Rails:has_many,但也有一个不同的名称

时间:2010-02-04 10:57:05

标签: ruby-on-rails activerecord

假设User有许多Document个,以及他们正在处理的单个Document。我如何在rails中表示这个?

我想说current_user.current_document = Document.first(在文档前面有或没有current_)并且不要更改current_user.documents集合。

这就是我所拥有的:

class Document < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :documents
  has_one :document
end

问题在于,当我说current_user.document = some_document时,它会从current_user.document中移除先前存储在current_user.documents中的文档。由于has_one具有Document关系,这是有道理的,但不是我想要的。我该如何解决?

1 个答案:

答案 0 :(得分:8)

您需要将模型更改为

class Document < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :documents

  # you could also use :document, but I would recommend this:
  belongs_to :current_document, :class_name => "Document"
end

P.S。但要注意循环保存。如果您创建一个新用户(并且尚未保存)并设置current_document然后保存用户,则可能会出现堆栈溢出或其他疯狂错误。