2015-02-07 55 views
1

我有一个应用程序有三个模型:company,universityformation。这三种模式之间Rails中的多个模型错误

的关系是:

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

此代码工作正常,但问题是,当我尝试创建一个新的形成和选择大学的名字,我得到这个错误

公司(# - 650866168)预计,拿到大学(# - 647908008)

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

回答

1

我认为这个错误很有说服力:你不能使用Company关联来存储University,因为预期的对象是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 

作为一个方面说明,我觉得这个实现可以通过使用polymorphic association,而不是得到改善简单的关联和自定义setter和getter方法。

+0

这是为新记录工作,但是当我尝试编辑已经使用公司名称的记录并尝试选择大学名称时,此大学名称未保存 – avinodra 2015-02-07 18:33:20

+0

这就是为什么我强烈建议朝多态关联或类似的方向发展实现。这样,你会在兔子洞里变得越来越深......但是让我们看看我的编辑是否解决了你的问题(这就是说,你将同时拥有“大学”和“公司”记录)。 – dgilperez 2015-02-07 18:59:32

+0

现在,当我在编辑 – avinodra 2015-02-07 19:05:05