2013-10-10 87 views
0

我有一個has_one的多態關聯,當嘗試通過關聯創建時,它給了我一個錯誤。與has_one的多態關聯,不能通過關聯創建

class User < ActiveRecord::Base 
    belongs_to :userable, polymorphic: true 
end 

class Student < ActiveRecord::Base 
    attr_accessible :gender, :description, :dob 
    has_one :user, :as => :userable 
end 

如果我嘗試這樣做:

s = Student.new 
s.user.create 

我得到和錯誤未定義的方法創造 '零'

但是!如果我將關聯更改爲has_many用戶,那麼現在我可以在上面執行同樣的操作。

任何人都可以解釋爲什麼發生這種情況?謝謝!

回答

1

問題是用戶爲零,因爲您尚未爲其分配值。 你應該使用類似:

s.build_user(...) 

s.create_user(...) 
+0

完美!我不明白的是,當我使用has_many時,用戶數組也是零,但它仍然允許創建.. –

+1

@UriKlar太棒了!當你使用has_many時,關聯被初始化爲一個空數組,這就是爲什麼你能夠調用它的方法,因爲它不是零。使用'has_one'關聯無法自動初始化,您必須調用其中一個輔助方法(build_xxx,create_xxx)或者像x.foo = Foo.new那樣顯式指定它 –