当轨道上的红宝石中有多对多的关系时,如何销毁记录?

时间:2016-01-07 23:13:15

标签: ruby-on-rails ruby oracle

在我的应用程序中有配方和配料,所以配方可以有很多成分,一种成分可以用于许多食谱,一切都很好,当我创建食谱时,有一个名为Has_ingredient的表,每个食谱保存每个成分

问题是,现在当我尝试销毁配方时出现错误,因为我需要在删除配方之前销毁与该配方关联的Has_ingredient中的记录。

所以在我的模型中我创建了这样的东西

class Recipe < ActiveRecord::Base

    before_destroy :destroy_ingredents
    ....
    ....
    ....
    def destroy_ingredents

       HasIngredent.destroy(recipe_id: self.id)
    end

好吧,现在我收到了这个错误:OCIERROR:ORA-00904。

所以现在的问题不是Rails,而是数据库(我使用的是Oracle),但是我很确定问题是我如何使用destroy方法但我无法想象如何正确使用它来删除has_ingredent表中与之关联的每条记录某些食谱

2 个答案:

答案 0 :(得分:3)

摧毁孩子的最佳方法是使用dependent

所以在你的模型中,你会得到:

class Recipe < ActiveRecord::Base
  has_many :ingredients, dependent: :destroy
end

答案 1 :(得分:2)

正如@pauloancheta建议的那样,用铁轨留下这些是更好的方法。但是,如果您想知道正确的语法,

HasIngredent.find_by(recipe_id: self.id).destroy