我收到错误:
ActiveModel::MissingAttributeError: can't write unknown attribute `[:account_id, :list_id]`
型号:
class Account < ActiveRecord::Base
has_many :accounts_lists
has_many :subscriptions, -> {uniq}, :through => :accounts_lists, source: :list
has_many :lists, foreign_key: 'creator_id'
end
class List < ActiveRecord::Base
has_many :accounts_lists
has_many :subscribers, -> {uniq}, :through => :accounts_lists, source: :account
belongs_to :creator, class_name: 'Account'
end
class AccountsList < ActiveRecord::Base
self.primary_key = [:account_id, :list_id]
belongs_to :account
belongs_to :list
end
我正在尝试运行种子方法并在以下命令中向帐户添加列表:
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
集合上的正确关联。
有什么想法吗?
答案 0 :(得分:1)
因此,在阅读完所有文档并查看我的需求以及has_many :through
和has_and_belongs_to_many
的配置选项后,我意识到我并不真正需要{{1}由于连接的性质,并且因为has_many :through
(简称habtm)具有我需要定义的所有配置选项完全我需要的连接是什么样的。我决定尝试这个选项。以下是任何未来具有相同问题的googlers的工作代码。
has_and_belongs_to_many
只是指出另一个有趣的加入场景我有以下几点:
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
做到这一点我仍然想知道是否可以使用这种类型的连接