无法通过源将has_many的未知属性写入另一个has_many到同一个表

时间:2014-10-03 01:28:33

标签: ruby-on-rails rails-activerecord has-many-through ruby-on-rails-4.2

我收到错误:

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集合上的正确关联。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

因此,在阅读完所有文档并查看我的需求以及has_many :throughhas_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做到这一点我仍然想知道是否可以使用这种类型的连接