Rails: has_many, но также has_one под другим именем - PullRequest
5 голосов
/ 04 февраля 2010

Скажем, у User есть много Document с, и один Document, над которым они сейчас работают.Как мне представить это в рельсах?

Я хочу сказать 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 Ответ

8 голосов
/ 04 февраля 2010

Вам нужно изменить свои модели на

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, а затем сохраняете пользователя, вы можете получить переполнение стека или другие сумасшедшие ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...