【问题标题】:How to destroy a record when there is many-to-many relationship in ruby on rails?当ruby on rails中存在多对多关系时如何销毁记录?
【发布时间】:2016-01-08 07:29:04
【问题描述】:

在我的应用程序中有食谱和配料,所以一个食谱可以有很多配料,而且一个配料可以在很多食谱中使用,一切都很好,当我创建食谱时,有一个名为 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 表中的每条记录某些食谱

【问题讨论】:

    标签: ruby-on-rails ruby oracle


    【解决方案1】:

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

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

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

    【讨论】:

    • 好方法!!拯救了我的一天:)
    【解决方案2】:

    正如@pauloancheta 所建议的那样,最好的方法是将它们留在轨道上。但是,如果您想知道正确的语法,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多