1

我收到的錯誤:無法寫入通過源一的has_many未知屬性與其他的has_many給同桌

ActiveModel::MissingAttributeError: can't write unknown attribute `[:account_id, :list_id]` 

型號:

​​

我試圖運行種子法並在以下命令的帳戶中添加一個列表:

a = Account.create(email: 'email', password: 'secret', password_confirmation: 'secret') 
list1 = List.create(creator: a, list_type: music, name: "a's list 1") 
a.subscriptions << list1 

我改變了典型的名稱account.lists,因爲應用程序的性質,用於多對多連接。一個帳戶可以有許多其訂閱的列表,以及許多其創建者的列表。

我認爲,從該錯誤措辭方式,它是很難找到合適的關聯用於添加List的到subscriptions收集Account

任何想法?

回答

1

所以,閱讀文檔的一切,看着我的需求和has_many :throughhas_and_belongs_to_many的配置選項後,我意識到,我並不真的需要has_many :through由於聯接的性質,而且由於has_and_belongs_to_many (簡稱habtm)具有我需要的所有配置選項來定義,正好是我需要的連接類似。我決定嘗試一下這個選項。以下是任何未來Google員工遇到同樣問題的工作代碼。

class Account < ActiveRecord::Base 
    has_and_belongs_to_many :subscriptions, -> {uniq}, class_name: 'List', join_table: 'accounts_lists', foreign_key: 'subscription_id', association_foreign_key: 'subscriber_id' 
    has_many :lists, foreign_key: 'creator_id' 
end 

class List < ActiveRecord::Base 
    has_and_belongs_to_many :subscribers, -> {uniq}, class_name: 'Account', join_table: 'accounts_lists', foreign_key: 'subscriber_id', association_foreign_key: 'subscription_id' 
    belongs_to :creator, class_name: 'Account', foreign_key: 'creator_id' 
end 

而只是指出了另一個有趣的加盟方案我是以下幾點:

class List < ActiveRecord::Base 
    has_and_belongs_to_many :parents, -> {uniq}, class_name: 'List', join_table: 'lists_lists', foreign_key: 'parent_id', association_foreign_key: 'child_id' 
    has_and_belongs_to_many :children, -> {uniq}, class_name: 'List', join_table: 'lists_lists', foreign_key: 'child_id', association_foreign_key: 'parent_id' 
end 

這是許多到許多地方基本上是List可以Lists這反過來又可以有Lists它可以有更多的Lists等,等等,等等......

希望這可以幫助別人在未來的這個問題...雖然....如果有人知道如何做到這一點與has_many :through我仍然很想知道這是否可以使用這種類型的連接。