Логика контроллера для referenced_in и reference_many в mongoid - PullRequest
0 голосов
/ 27 февраля 2011

Я пытался использовать mongoid с ассоциациями referenced_in и reference_many У меня есть две модели: пользователь и вопрос. Вопрос может иметь одного автора, но пользователь может быть автором нескольких вопросов. Ниже приведен фрагмент структуры моделей.

class User
  include Mongoid::Document
  references_many :questions, :inverse_of => :poster, :dependent => :delete
end 

class Question
  include Mongoid::Document
  referenced_in :poster, :class_name => "User"
end

Теперь мой QuestionController # new выглядит следующим образом

def create
  @question = Question.new(params[:question])
  @question.poster = current_user

  if @question.save
    current_user.questions <<= @question
    current_user.update_attributes(:questions => current_user.questions)
  end
end

Поле question.poster заполнено правильно, но массив user.questions не заполнен. Какова будет правильная логика контроллера для этого?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2011

Вы пробовали следующим образом

def create
  @question = Question.new(params[:question])

  if @question.valid?
    current_user.questions << @question

  end
end

<< перезаписывается mongoid и сохраняет одновременно current_user и @question.

0 голосов
/ 27 февраля 2011

Ваша модель выглядит хорошо.Вам не нужно делать всю эту работу в вашем контроллере.Это должно выглядеть примерно так:

def create
  @question = current_user.questions.build(params[:question])

  if @question.save
    #redirect logic goes here
  end
end

Вам не нужно явно добавлять вопрос в массив вопросов пользователя.

...