假设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
关系,这是有道理的,但不是我想要的。我该如何解决?
答案 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
然后保存用户,则可能会出现堆栈溢出或其他疯狂错误。