Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中的多模型错误_Ruby On Rails_Ruby_Ruby On Rails 4_Activerecord_Model - Fatal编程技术网

Ruby on rails Rails中的多模型错误

Ruby on rails Rails中的多模型错误,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,model,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,Model,我的应用程序有三种模式:公司,大学和组织 这三个模型之间的关系是: class Company < ActiveRecord::Base has_many :formations, dependent: :destroy end class University < ActiveRecord::Base has_many :formations, dependent: :destroy end class Formation < ActiveRecord::Ba

我的应用程序有三种模式:
公司
大学
组织

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

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
class公司
因此,在这个应用程序中,我想在表单中列出同一领域的大学和公司的列表,这就是我在表单中使用此代码的原因:

<% 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" %>

这段代码运行得很好,但问题是当我尝试创建一个新的表单并选择大学名称时,我遇到了这个错误

公司(#-650866168)预期,获得大学(#-647908008)


对于
self.company=公司或大学
。如何解决这个问题?

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

我相信,如果你像这样重写你的二传手,你会得到你想要的结果:

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
class Formation

作为旁注,我认为,通过使用一个而不是简单的关联和自定义setter和getter方法,可以改进此实现。

这对于新记录是可行的,但当我尝试编辑一个已经使用公司名称的记录并尝试选择一个大学名称时,此大学名称不会被保存,这就是为什么我强烈建议转向多态性关联,或任何类似的实现。这样,你会在兔子洞里越陷越深。。。但是,让我们看看我的编辑是否解决了您的问题(即您将有
大学
公司
与编辑的记录关联)。现在,当我尝试在EDIT中保留大学名称而不是公司名称时,我得到了相反的结果。我认为这将起作用,因为我已经将代码更改为此代码,并且如果大学名称为self.university=university\u from\u name self.company=nil else self.university=nil self.company=Company.where(name:name)。first_或_create endit正在工作非常感谢,但是你能告诉我多态关联比这种方法有什么优势吗