我有这些模特:
FamilyTree
# == Schema Information
#
# Table name: family_trees
#
# id :integer not null, primary key
# name :string(255)
# user_id :integer
class FamilyTree < ActiveRecord::Base
attr_accessible :name
belongs_to :user
has_many :memberships, dependent: :destroy
has_many :active_members, through: :memberships, source: :user, dependent: :destroy
has_many :passive_members, through: :memberships, source: :member, dependent: :destroy
has_many :nodes, dependent: :destroy
has_many :members, through: :memberships, dependent: :destroy
end
Membership
# == Schema Information
#
# Table name: memberships
#
# id :integer not null, primary key
# family_tree_id :integer
# user_id :integer
# member_id :integer
class Membership < ActiveRecord::Base
belongs_to :family_tree
belongs_to :user
belongs_to :member
end
Member
# == Schema Information
#
# Table name: members
#
# id :integer not null, primary key
# email :string(255)
# family_tree_id :integer
#
class Member < ActiveRecord::Base
attr_accessor :relation
has_many :memberships, dependent: :destroy
belongs_to :family_tree
end
Node
# == Schema Information
#
# Table name: nodes
#
# id :integer not null, primary key
# name :string(255)
# family_tree_id :integer
# user_id :integer
# media_id :integer
class Node < ActiveRecord::Base
belongs_to :family_tree
belongs_to :user
belongs_to :media, polymorphic: true, dependent: :destroy
has_many :comments, dependent: :destroy
has_many :memberships, through: :family_tree, dependent: :destroy
end
当我尝试删除node
时,我收到此错误:
[109] pry(main)> n = Node.last
Node Load (0.8ms) SELECT "nodes".* FROM "nodes" ORDER BY "nodes"."id" DESC LIMIT 1
=> #<Node id: 102, name: "10PP Burpees", family_tree_id: 57, user_id: 57, media_id: 246>
[110] pry(main)> n.destroy
(0.1ms) BEGIN
ActsAsTaggableOn::Tagging Load (1.4ms) SELECT "taggings".* FROM "taggings" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 [["taggable_id", 102], ["taggable_type", "Node"]]
ActsAsTaggableOn::Tagging Load (0.5ms) SELECT "taggings".* FROM "taggings" INNER JOIN "tags" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND "taggings"."context" = 'user_tags' [["taggable_id", 102], ["taggable_type", "Node"]]
ActsAsVotable::Vote Load (0.5ms) SELECT "votes".* FROM "votes" WHERE "votes"."votable_id" = $1 AND "votes"."votable_type" = $2 [["votable_id", 102], ["votable_type", "Node"]]
SQL (0.3ms) DELETE FROM "votes" WHERE "votes"."id" = $1 [["id", 51]]
Video Load (0.4ms) SELECT "videos".* FROM "videos" WHERE "videos"."id" = $1 LIMIT 1 [["id", 246]]
SQL (0.2ms) DELETE FROM "videos" WHERE "videos"."id" = $1 [["id", 246]]
Comment Load (0.3ms) SELECT "comments".* FROM "comments" WHERE "comments"."node_id" = $1 [["node_id", 102]]
Membership Load (1.1ms) SELECT "memberships".* FROM "memberships" INNER JOIN "family_trees" ON "memberships"."family_tree_id" = "family_trees"."id" WHERE "family_trees"."id" = $1 [["id", 57]]
(0.3ms) ROLLBACK
ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection: Cannot modify association 'Node#memberships' because the source reflection class 'Membership' is associated to 'FamilyTree' via :has_many.
from /.rvm/gems/ruby-2.1.6@myapp/gems/activerecord-4.1.12/lib/active_record/associations/through_association.rb:86:in `ensure_mutable'
我知道这个错误与关联有关,但我认为我太接近它了,我无法弄清楚导致这一特定问题的原因。
想法?
答案 0 :(得分:0)
所以问题在我的Node.rb
:
has_many :memberships, through: :family_tree, dependent: :destroy
我意识到我实际上并不需要它,所以我只是把它砍掉了。
解决了这个问题并摆脱了错误。