0

我有一个带有 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
4

2 回答 2

3

您需要从数组中删除元素:

user.practices.delete(user.practices[2])

或者:

user.practices.delete_at(2)
于 2013-05-29T18:53:21.633 回答
1

有几种方法。一种是:

 user.practices = user.practices - [user.practices[1]]
于 2013-05-29T18:50:03.303 回答