如何从集合中删除某些内容

时间:2013-05-29 18:37:21

标签: ruby-on-rails ruby activerecord orm relationship

我有一个带有User.rb模型的Rails应用程序,该模型与Practice.rb模型有很多关系(这可能是模型的坏名称)例如,用户可能在几个不同的练习区域工作(例如'空手道'和'柔道'),我用数据库播种了。在某种情况下,我希望减少用户拥有的练习数量(用户最多有两个),因此我在其中一个模型中的方法中执行此操作以删除第二个练习

      if user.practices.size > 1
        user.practices[1].destroy
      end 

然而,结果是它不仅从user.practices中移除了这种习惯(例如,“空手道”),而且还破坏了练习的存在,使得'空手道'不再列在任何人的可用做法。如果我做Practice.all'空手道'将不会出现。

如果我使用'delete'代替'destroy.'

,也会发生同样的事情

user.practices产生CollectionProxy

user.practices移除Practice.all而不将其从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

完全删除的正确方法是什么?

更新

模型设置是这样的。理想情况下,当我从用户中删除练习时,相关的practice_listing也将被删除。

{{1}}

2 个答案:

答案 0 :(得分:1)

有几种方法。一个是:

 user.practices = user.practices - [user.practices[1]]

答案 1 :(得分:1)

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

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

或者:

user.practices.delete_at(2)