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

Pet*_*ter 5 activerecord ruby-on-rails

让我们说一个User有很多Documents,还有一个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
Run Code Online (Sandbox Code Playgroud)

问题是,当我说current_user.document = some_document,它删除以前存储在文档current_user.documentcurrent_user.documents.这是有道理的,因为这种has_one关系Document有,但不是我想要的.我如何解决它?

Mar*_*rth 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
Run Code Online (Sandbox Code Playgroud)

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