2016-09-21 40 views
0

我有這兩種型號:的has_many或belongs_to的工作錯

class Answer < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :question 
    has_many :edits, dependent: :destroy 
end 

class Question < ActiveRecord::Base 
    belongs_to :user 
    has_many :answers, dependent: :destroy 
end 

但是,當我在軌控制檯寫入以下內容:

q=Question.new 
q.save 

a=Answer.new 
a.question = q 
a.save 

q.answers.size 

它給了我零。

irb(main):026:0> q.answers.size 
    => 0 

但是,當我寫這篇文章:

Answer.where(:question_id => q.id).size 

它給了我1

SO我該怎麼辦?

情況下你需要它 - 答案和問題遷移:

class CreateAnswers < ActiveRecord::Migration 
    def change 
    #execute "DROP TABLE #{:answers} CASCADE" 

    create_table :answers do |t| 
     t.text :body 
     t.references :user, index: true, foreign_key: true 
     t.references :question, index: true, foreign_key: true 

     t.timestamps null: false 
    end 
    end 
end 

class CreateQuestions < ActiveRecord::Migration 
    def change 
    #execute "DROP TABLE #{:questions} CASCADE" 
    create_table :questions do |t| 
     t.string :title 
     t.text :body 
     t.references :user, index: true, foreign_key: true 

     t.timestamps null: false 
    end 
    end 
end 
+4

嘗試重新加載問題'q.reload' –

+0

@Deepak它幫助,謝謝! – user2950593

回答

2

你需要在你的關係inverse_of選項來使用。

class Answer < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :question, inverse_of: answers 
    has_many :edits, dependent: :destroy 
end 

class Question < ActiveRecord::Base 
    belongs_to :user 
    has_many :answers, inverse_of: question, dependent: :destroy 
end 

所以,當你這樣做:

a.question = q 

Rails會爲你做這個(在內存中):

q.answers << a 

而且你不需要重新加載Q值。