尝试在我的数据库中destroy_all我的用户时遇到了问题。当我运行User.destroy_all时,我得到:
ActiveRecord::HasManyThroughCantAssociateThroughHasOneOrManyReflection: Cannot modify association 'Account#hotel_partnerships' because the source reflection class 'Partnership' is associated to 'Hotel' via :has_many.
我怀疑主要的问题是,在我的架构中,我有一个account
模型,belongs_to
一个user
(帐户的所有者),同时account has_many users
1}}通过其offices
和hotels
。
以下是我的协会的样子:
- Account.rb
class Account < ActiveRecord::Base
# associations
has_many :hotel_partnerships, through: :hotels, source: :partnerships, dependent: :destroy
has_many :office_partnerships, through: :offices, source: :partnerships, dependent: :destroy
has_many :hotel_users, through: :hotels,source: :users, dependent: :destroy
has_many :office_users, through: :offices, source: :users, dependent: :destroy
has_many :hotels, dependent: :destroy
has_many :offices, dependent: :destroy
has_many :rooms, through: :hotels, dependent: :destroy
has_many :tasks, through: :hotels, dependent: :destroy
belongs_to :admin, class_name: "User", foreign_key: "admin_user_id", dependent: :destroy
- User.rb
class User < ActiveRecord::Base
## this line adds auth token to all user on creation
acts_as_token_authenticatable
# associations
belongs_to :account, dependent: :destroy
has_and_belongs_to_many :hotels
has_and_belongs_to_many :offices
has_many :tasks, dependent: :destroy
has_many :bookings, dependent: :destroy
has_one :created_account, class_name: "Account", foreign_key: "admin_user_id", inverse_of: :admin, dependent: :destroy
- Partnership.rb
class Partnership < ActiveRecord::Base
belongs_to :hotel
belongs_to :office
- Hotel.rb
class Hotel < ActiveRecord::Base
geocoded_by :full_address
after_validation :geocode
has_many :partnerships
belongs_to :account
has_and_belongs_to_many :users
has_many :tasks, dependent: :destroy
has_many :rooms, dependent: :destroy
has_many :beds, through: :rooms, dependent: :destroy
has_many :photos, dependent: :destroy
accepts_nested_attributes_for :photos
accepts_nested_attributes_for :rooms
是否可以修复此循环关联问题?