我有一个带有 User.rb 模型的 Rails 应用程序,该模型与 Practice.rb 模型具有多对多关系(这可能是模型的坏名)例如,用户可能在几个不同的实践领域工作(例如'karate' 和 'judo'),我用它们作为数据库的种子。有一种情况,我希望减少用户的练习次数(用户最多有两次),因此我在其中一个模型的方法中执行此操作,以删除第二次练习
if user.practices.size > 1
user.practices[1].destroy
end
但是,结果是它不仅从 中删除了该练习(例如,“空手道”)user.practices
,而且还销毁了该练习,使得“空手道”不再列在任何人的可用练习中。如果我做Practice.all
'空手道'就不会出现。
'delete'
如果我使用而不是,也会发生同样的事情'destroy.'
user.practices 产生一个 CollectionProxy
什么是user.practices
从不完全删除的情况下将其删除的正确方法Practice.all
更新
建立的模型是这样的。理想情况下,当我从用户那里删除练习时,相关的 practice_listing 也会被删除。
User.rb
has_many :practice_listings
has_many :practices, through: :practice_listings
Practice.rb
has_many :practice_listings
has_many :users, through: :practice_listings
PracticeListing.rb
belongs_to :practice
belongs_to :user