我有一个带有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}}
答案 0 :(得分:1)
有几种方法。一个是:
user.practices = user.practices - [user.practices[1]]
答案 1 :(得分:1)
您需要从数组中删除元素:
user.practices.delete(user.practices[2])
或者:
user.practices.delete_at(2)