Rails 中的多模型错误

Multiple model error in Rails

我有一个包含三个模型的应用程序:companyuniversityformation

这三个模型之间的关系是:

class Company < ActiveRecord::Base
  has_many :formations, dependent: :destroy
end 

class University < ActiveRecord::Base
  has_many :formations, dependent: :destroy
end 

class Formation < ActiveRecord::Base
    #company
    belongs_to :company
    #universities
    belongs_to :university


    def company_name
      (company or university).try(:name)
    end

    def company_name=(name)
      company_or_university = University.where(name: name).first
      company_or_university ||= Company.where(name: name).first_or_create
      self.company = company_or_university
    end
end

所以在这个应用程序中,我想下拉列表中的大学和公司在同一领域的形成形式,这就是为什么我在我的形成形式中使用这个代码:

<% companies_or_universities = (Company.all.pluck(:name) + University.all.pluck(:name)).sort %>
<%= f.text_field :company_name, data: {autocomplete_source: companies_or_universities}, required: true, class: "form-control form-newjob" %>

此代码工作正常,但问题是当我尝试创建一个新编队并选择大学名称时,出现此错误

Company(#-650866168) expected, got University(#-647908008)

self.company = company_or_university。我该如何解决这个问题?

我认为这个错误很容易解释:您不能使用 Company 关联来存储 University,因为预期的对象是 Company

我相信,如果您像这样重写 setter,您会得到想要的结果:

class Formation < ActiveRecord::Base
  def company_name=(name)
    university_from_name = University.where(name: name).first

    if university_from_name
      self.university = university_from_name
      self.company = nil if persisted?
    else
      self.company = Company.where(name: name).first_or_create 
      self.university = nil if persisted?
    end
  end
end

附带说明一下,我认为可以通过使用 polymorphic association 而不是普通关联和自定义 setter 和 getter 方法来改进此实现。