【问题标题】:Polymorphic association with has_one, can't create through association与has_one的多态关联,不能通过关联创建
【发布时间】:2013-10-10 09:45:06
【问题描述】:

我有一个与 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

我得到并错误 Undefined method create for 'nil'

但是!如果我将关联更改为 has_many 用户,那么我现在可以执行上述相同的行。

谁能解释为什么会这样?谢谢!

【问题讨论】:

    标签: ruby-on-rails polymorphic-associations has-one


    【解决方案1】:

    问题是 user 是 nil ,因为你没有给它赋值。 你应该使用类似的东西:

    s.build_user(...)
    

    s.create_user(...)
    

    【讨论】:

    • 完美!我不明白的是当我使用 has_many 时,用户数组也是 nil 但它仍然允许创建..
    • @UriKlar 太棒了!当你使用 has_many 时,关联被初始化为一个空数组,这就是为什么你可以调用它的方法,因为它不是 nil。使用“has_one”,关联无法自动初始化,您必须调用辅助方法之一(build_xxx、create_xxx)或像 x.foo = Foo.new 一样显式分配它
    猜你喜欢
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多