2015-02-07 49 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