2011-02-27 35 views
0

我一直在嘗試使用mongoid和referenced_in和references_many關聯。我有兩個模型,用戶和問題。一個問題可以有一個作者,但是一個用戶可以是一個作者多個問題。下面的代碼片段顯示了模型的結構。mongoid中referenced_in和references_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#新情況如下

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陣列。什麼纔是正確的控制器邏輯呢?

回答

0

您的模特看起來不錯。儘管如此,您不需要在控制器中完成所有這些工作。它應該看起來像這樣:

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

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

您不需要明確地將問題添加到用戶的問題數組中。

+0

嗨保羅,感謝您的答覆。我嘗試過,但是'User.first.questions'仍然返回'nil'。儘管'poster_id'字段反映了問題的值,用戶中沒有相應的字段。我如何訪問用戶的問題數組? – reddragon 2011-02-27 13:09:24

+0

當你打電話時它應該返回一個標準對象。你使用的是什麼版本的mongoid? – 2011-03-01 13:28:27

+0

我正在使用2.0.0.rc.6。當我做'User.last.questions'時(我嘗試通過應用程序爲最後一個用戶創建一個新問題),我得到'[]'。 – reddragon 2011-03-03 07:54:59

0

您是否通過以下方式

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

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

    end 
end 

<<由mongoid覆蓋嘗試並節省current_user@question一次。

+0

謝謝,我試過了,但沒有奏效。即使這樣做後,問題數組仍然是空的。 'irb(main):009:0> User.last.questions' '=> []' – reddragon 2011-03-01 05:11:22

相關問題