2015-06-22 20 views
0

我在公司表和用戶表(1家公司有很多用戶)之間有1:多的關係。然而,似乎company_id是用戶的強制值。至少我相信這是我在播種時遇到的錯誤的原因:ActiveRecord::AssociationTypeMismatch: Company(#29826300) expected, got String(#8555320)。我如何使關係成爲可選項,還包括沒有公司的用戶?1:很多關係,但希望它是可選的


在我的用戶遷移文件,我有:

t.references :company, index: true, foreign_key: true 
add_index :users, [:company_id, :username] # 

在我公司的模型文件:

has_many :users 
accepts_nested_attributes_for :users, :reject_if => :all_blank, :allow_destroy => true 

在我的用戶模型文件:

belongs_to :organization 
+0

這聽起來更像是你在你的種子文件中做了一些錯誤的事情,比如'User.create(company:'nil')'你能否把它添加到問題中? – max

+0

我的種子文件正在工作,然後我添加了關係。接下來,我沒有更改我的種子文件和種子(表格的新創建/遷移之後)。然後我收到播種的錯誤信息。 – Nick

+0

鑑於我有的代碼,應該使關係可選通常?如果我從種子文件中刪除用戶記錄,它會成功種子。 – Nick

回答

0

我發現原因。正如Maxcal所說,它不是OP中的代碼就是問題所在。在添加關聯之前,用戶模型已經有一個名爲company的變量。在添加關聯之後,Rails希望該變量專用於關聯。我沒有想到這一點,並認爲company_id承擔這個角色。重命名變量解決了它。

+0

好。我發現的一個潛在問題是,如果'user.organisation'指向一個公司,您需要在關係中指定它,如下所示:'belongs_to:organization,class_name:'Company'' – max

+0

啊,謝謝,確實阻止了未來當我開始使用關聯時出現問題。 – Nick

相關問題